5 View¶
约 81 个字 30 行代码 预计阅读时间 1 分钟
```admonish info
通常若引用范围的元素修改,则视图的元素也会修改。
若视图的元素修改,则引用范围的元素也会修改。
- 管道语法中让视图对范围进行操作。通过使用操作符 |,可以创建视图的管道:
C++
auto v = coll
| std::views::filter([](auto elem){return elem % 3 == 0;})
| std::views::transform([](auto elem){return elem * elem;})
|std::views::take(3);
- 通过类模板指定范围结束的值
C++
template<auto End>
struct EndValue {
bool operator== (auto pos) const {
return *pos == End; // end is where iterator points to End
}
};
int main() {
std::vector coll = {42, 8, 0, 15, 7, -1};
std::ranges::subrange range{coll.begin(), EndValue<7>{}};
std::ranges::sort(range);
std::ranges::for_each(coll.begin(), EndValue<-1>{},
[](auto value){std::cout << ' ' << value;})
}
- 支持投影功能,避免写显示的比较器,直接通过投影的方式指定使用Person的age进行排序