view是一个 range,不拥有数据,只会引用数据,有点像string_view,具有常数时间复杂度的的拷贝、移动和赋值操作。
view最为方便的一点是增加了管道运算符:
#include <vector>
#include <ranges>
#include <iostream>
using namespace std;
int main()
{
vector<int> data{1, 4, 6, 7, 10};
auto even = [](int i) { return 0 == i % 2; };
auto square = [](int i) { return i * i; };
auto f1 = data | views::filter(even) | views::transform(square);
for (int i : f1 )
cout << i << ' ';
}
编译运行程序输出:
16 36 100
需要说明的是view是懒惰求值,这意味着,对view的操作仅在必要求值时才会进行计算:
#include <vector>
#include <ranges>
#include <iostream>
using namespace std;
int main()
{
vector<int> data{1, 4, 6, 7, 10};
auto even = [](int i) { return 0 == i % 2; };
auto square = [](int i) { return i * i; };
auto f1 = data | views::