本文是C++20四大系列的收官之作,不少读者可能会与这样的疑问:位列四大的range是个什么特性?
笔者一开始也有同样的感觉:C++20前三大都是“划时代”的改动:module改变了C++工程的组织模型,coroutine改变了C++并发的实现、concept则是模板编程自存在以来的最大变革,range到底带来了哪些改变,可位列于四大?
因为他改变了循环的方式,或者说,他给循环提供了更高层的抽象
什么是Range?
定义了begin()、end()迭代器的就算一个Range. Range共有两大类:Container与View. Container拥有begin() 、end() 所指向的数据,而view不拥有begin() 、end()所指向的数据,view更轻量、易于拷贝、移动。
我们以这样一个操作为例,可以清楚的看清range的面貌:
1,给定一个int数组,挑出其中的偶数
2,将得到的数据平方
3,将这些偶数倒序
#include <algorithm>
#include <vector>
#include <iostream>
int main() {
const std::vector<int> numbers = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto even = [](int i) {
return 0 == i % 2; };
auto square = [](int i) {
return i * i; };
std