C++20中views的学习和使用
如你所知C标准库从C98发布以来在机制层面一直没有较大变动。直到C20中range的引入再次使得沉寂许久的C标准库再次焕发了生机。range 库主要作用于对具有范围的数据处理。对于确定范围的数据在传统标准库中也有对应的处理方案。但 range 对范围的定义和传统的定义并不一致如范围具有不要求一定有界不要求首尾的数据类型一致等等这是背后其实有一套复杂的规则。而从应用的角度来看我们应该熟悉和掌握 range 中的常用函数和数据类型其中最常用的一类 range 便是 view这在命名空间 std::ranges::views 中。下面的代码实例为计算一个 vector 中的每个元素的平方。熟悉传统容器和算法库使用的朋友们很容易能够学习并使用。#include algorithm #include iostream #include ranges #include vector int square(int x) { return x * x; } int main() { std::vector data {1, 2, 3, 4, 5}; // 使用传统的算法库 { std::vectorint ret; std::transform(data.begin(), data.end(), std::back_inserter(ret), square); for (auto x : ret) { std::cout x ; } std::cout std::endl; } // 使用 C20 的 view { auto ret std::ranges::views::transform(data, square); for (auto x : ret) { std::cout x ; } std::cout std::endl; } }对于这段代码最直观的感受可能是使用 view 可以少写一些代码。但这些不会成为 view 引入新标准的原因。