C++20新特性:范围(Ranges)详解
创作时间:
作者:
@小白创作中心
C++20新特性:范围(Ranges)详解
引用
CSDN
1.
https://blog.csdn.net/xie__jin__cheng/article/details/144663951
C++20 引入了一系列称为“范围(Ranges)”的新特性,这些特性为处理容器和范围提供了更简洁、更高效的方法。范围库主要包括视图(views)、操作(actions)和算法(algorithms)三个部分,旨在提高代码的可读性和性能。
视图(Views)
视图是轻量级的、不可变的范围适配器,它们可以对现有范围进行转换或过滤,生成新的范围。以下是一些常用的视图:
std::ranges::views::all:返回一个表示整个范围的视图。
std::ranges::views::filter:根据谓词对范围进行过滤。
auto even_numbers = std::ranges::views::filter(numbers, [](int n) { return n % 2 == 0; });std::ranges::views::transform:对范围中的每个元素应用一个函数,并生成一个新的范围。
auto squares = std::ranges::views::transform(numbers, [](int n) { return n * n; });std::ranges::views::slice:截取范围中的一部分。
auto slice_of_numbers = std::ranges::views::slice(numbers, 1, 5);
操作(Actions)
操作是对范围执行某些操作的对象,例如将范围转换为容器,或者对范围中的元素进行排序。
std::ranges::to_vector:将范围转换为
std::vector。std::vector<int> vec = std::ranges::to_vector(numbers);std::ranges::sort:对范围进行排序。
std::ranges::sort(numbers);
算法(Algorithms)
C++20 范围库中的算法是对标准算法库(<algorithm>)的扩展,旨在与范围更好地协作。
std::ranges::find:在范围中查找元素。
auto it = std::ranges::find(numbers, 42);std::ranges::for_each:对范围中的每个元素应用一个函数。
std::ranges::for_each(numbers, [](int n) { std::cout << n << " "; });std::ranges::count:计算范围内等于某值的元素数量。
auto count = std::ranges::count(numbers, 42);
示例代码
以下是一个使用范围库的简单示例:
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 使用 views::filter 过滤出偶数
auto even_numbers = std::ranges::views::filter(numbers, [](int n) { return n % 2 == 0; });
// 使用 views::transform 将每个偶数平方
auto squares = std::ranges::views::transform(even_numbers, [](int n) { return n * n; });
// 将结果转换为 vector 并输出
std::vector<int> result = std::ranges::to_vector(squares);
for (int n : result) {
std::cout << n << " ";
}
return 0;
}
总结
C++20 的范围库提供了一种更现代化、更简洁的方式来处理范围操作,极大地提高了代码的可读性和维护性。通过视图、操作和算法的组合,可以轻松地实现复杂的范围处理逻辑。
热门推荐
福州十大经典美食:从鱼丸到佛跳墙,每一道都有独特故事
港股IPO上市需要具备什么条件?有哪些合规要求?
工伤住院治疗期间的护理费由谁承担?
长者护理大全日常生活照料指南
拜登与普京年龄对比:两位年龄详情及政治影响力分析
桑菊饮——温病初起的神奇解药
四季度被罚款近600万元,交通银行该如何加强合规管理?
健康知识分享:寄生胎的真相与应对方法
东北工业重镇沈阳发布甲醇汽车推广政策 醇氢电动成北方新能源破局之道
开启云盘需要哪些权限
小米粥的正确熬法
五行喜金水的名字大全及寓意解析
喝水都胖?两类食物可辅助改善“胰岛素抵抗”,帮你形成易瘦体质
适合晚上工作的兼职有哪些?这四个兼职让你夜晚也能赚钱
福州台江医院:青少年遭遇校园霸凌后如何积极进行心理干预
10公里,5分配速,大神还是普通跑者?
艾草锤敲打7个部位 艾灸锤使用方法
房间里喷了杀虫剂可以睡觉吗?安全指南来了
网线的分类、性能鉴定及选型指南
创伤性颅脑损伤的常见原因及其应对方法
腰椎间盘膨出、突出、脱出有何区别?看完本文一目了然!
2025年考研报名人数降至388万,连续两年下降
秋天饮食有讲究,推荐6道家常菜,荤素搭配,连吃一周不重样
根据肤质和成分挑选适合你的护肤精华
婚礼花卉装饰全攻略:桌花、迎宾花和胸花手腕花如何选择?
【幼儿蒙学】领略中国古诗词之美——《黄鹤楼送孟浩然之广陵》
江苏常州:小城文旅火出圈!“百强”溧阳这样强势“抢客”
叙事性写作:让你的文章有趣又有力
表格的视觉设计,你需要注意这些细节!
2025年警校最新通知!招生有变化吗?政审新规定是什么?