01 | ranges的初步印象(新旧做法的对比)
1.ranges::sort——给容器排序
在这之前我们需要采用 标准库的sort 算法并且需要传入两个迭代器。但是现在我们可以这样,使用 ranges 命名空间下的 sort 函数,仅需要传入一个容器的名字即可。
以下是涉及到的concepts
2.views的概念——给对象进行筛选、转换、复制
我们可以将一个 range (stl容器是一个range,严格来说是有begin()和end()函数的stl容器),经过管道符传给 容器适配器,我们就可以得到视图对象,该视图对象是可以惰性求值的,因此所占的空间要比另外开辟一块空间要少,可以想象视图是百叶窗,只让你看到了应该看到的东西。
比如:接下来,我们举一个例子,筛选年龄在18岁以下的人的年龄,并将其输出到屏幕。
如果我们不使用 range 和 view 的话,就可能是这样:
3.生成递增序列——views::iota 类似python 中的 range
当然,我们也可以写一个 range 来满足斐波那契数列的惰性求值
当然,我们也可以写一个简单的协程来实现惰性求值
4.std::erase——删除满足条件的元素
使用了 range 之后,我们可以这样
而不是用的话,我们就得用 erase 和 remove_if 的常规做法