C++20四大特性之四:Range特性详解

本文详细介绍了C++20的Range特性,包括其懒惰求值、标准库提供的views等方面。Range通过定义begin()和end()迭代器简化了循环操作,尤其在不需中间变量的情况下提高了代码的效率和易读性。Range分为Container和View两类,View作为数据的引用,实现了高效且节省内存的处理方式。C++20引入的管道操作符进一步提升了Range的易读性和简洁性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值