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 的常规做法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2022-04-23 07 | 线程同步之原子变量