C++20新特性—range(一)

本文介绍了C++20中的Range概念,它是一个接口规范,提供了begin()和end()方法来枚举集合。Range将容器类划分为不同类型的iterator,包括input iterator、output iterator、forward iterator等。Range的意义在于简化集合访问和操作,通过定制点对象(CPO)如range::begin支持自定义扩展,并利用ADL(Argument-dependent lookup)进行名字查找。
摘要由CSDN通过智能技术生成

1.range的概念

“Ranges”实际上可理解为一个接口规范(C++20中的concept),它针对集合,提供begin()和end()两个方法,返回一个指示类(iterator),然后就可以枚举集合中的所有元素。由此,以前标准库中所有的容器类都满足range定义。

(注:集合应包括数组、链表等“一维”结构类型,也应该包括矩阵、树等“二维”结构类型,现在的range因有先后顺序的概念,因而在逻辑上是线性结构)。

按照一个集合可以进行如何枚举,有下面的特征:

将以前的容器类按照上面的标准进行分类如下:

另外,如果按读与写进行分类,可有input_range和output_range。集合不同,与之相关的iterator也不同(见下面描述)。

2.iterator category

iterator是集合访问的“指示器”,正是通过它才能访问某个特定元素和如何访问集合元素。根据集合的不同,iterator也不同,目前有6种iterator类型。

  • input iterator:只能向前移动,每次只能移动一步,只读且只能读一次它指向的东西。它以一个输入文件中的 read pointer为原型, istream_iterator 就是这一种类的典型代表。
  • output iterator:只能向前移动,每
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值