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:只能向前移动,每