迭代器头文件
所有容器都定义有各自的迭代器类型,所以当你打算使用某种容器的迭代器时,不必包含什么特殊的头文件。
不过有些特别的迭代器,比如反向迭代器,以及若干辅助的迭代函数,被定义于文件<iterator>中
…
…
…
迭代器种类
分为五种迭代器:
Output迭代器: 向前写入
Input迭代器: 向前读取一次
Forward迭代器: 向前读取
Bidirectional迭代器: 向前和向后读取
Random-access迭代器: 以随机访问方式读取
…
…
…
Output迭代器
Output迭代器允许一步一步前行并搭配write动作,因此你可以一个一个元素地赋值,不能使用output迭代器对同意区间迭代两次.
Output迭代器的操作如下:
*iter = val :将val写入迭代器所指位置
++iter:向前步进,返回新位置
iiter++ :向前步进,返回旧位置
…
…
…
Input迭代器
Input迭代器的操作如下:
*iter :读取实际元素
iter->member :读取实际元素的成员
++iter:向前步进,返回新位置
iiter++ :向前步进,返回旧位置
iter1 == iter2 :判断两个迭代器是否相等
iter1 != iter2 :判断两个迭代器是否不等
TYPE(iter) :复制迭代器
input迭代器只能读取元素一次,如果你复制input迭代器,并令原input迭代器和新产生的拷贝都向前读取,可能会遍历不同的值
你应该尽可能优先选用前置递增操作符++iter,因为性能更好,不需要返回旧值,也就不必花费一个临时对象来保存旧值
…
…
…
Forward迭代器
Forward迭代器的操作如下:
*iter :访问实际元素
iter->member :访问实际元素的成员
++iter:向前步进,返回新位置
iiter++ :向前步进,返回旧位置
iter1 == iter2 :判断两个迭代器是否相等
iter1 != iter2 :判断两个迭代器是否不等
TYPE() :创建迭代器(默认构造函数)
TYPE(iter) :复制迭代器(copy构造函数)
iter = iter2 :对迭代器赋值
与input迭代器不同的是,
两个forward迭代器如果指向同一个元素,operator==会获得true,如果两者都递增,会再次指向同一个元素
…
…
…
Bidirectional双向迭代器
Bidirectional在forward迭代器的基础上增加了回头迭代的能力:
–iter :步退,返回新位置
iter–:步退,返回旧位置
…
…
…
Random-Access随机访问迭代器
Random-Access迭代器的操作如下:
iter[n] :访问索引位置为n的元素
iter+=n :前进n个元素
iter-=n:回退n个元素
iiter+n:返回iter之后的第n个元素
iter-n:返回iter之前的第n个元素
iter1-iter2:返回iter1和iter2之间的距离
iter1<iter2:判断iter1是否在iter2之前
iter1>iter2:判断iter是否在iter2之后
iter1<=iter2:判断iter1是否不在iter2之后
iter1>=iter2:判断iter1是否不在iter之前
随机迭代器由以下对象和类型提供:
可随机访问的容器:array、vector、deque
String
寻常的C-style数组
Vector迭代器的递增和递减
一般而言你可以递增或递减临时性迭代器,但对于array、vector和string在某些编译平台上,就不行。考虑下面例子:
std::vector<int>coll;
if(coll.size()>1)
{
std::sort(++coll.begin(),coll.end());
}
编译++coll.begin()可能会失败,实际情况取决于平台.
因为vector、array、string的迭代器通常被实现为寻常指针,C++并不允许你修改任何基础类型的临时值,但对于struct和class则允许.因此,如果迭代器被实现为寻常指针,编译失败,如果被实现为class,则编译成功
C+11提供了next(),你可以这样写:
std::vector<int>coll;
if(coll.size()>1)
{
std::sort(std::next(coll.begin()),coll.end());
}
本文详细介绍了C++中的迭代器,包括迭代器头文件、五种迭代器的种类及其操作:Output迭代器、Input迭代器、Forward迭代器、Bidirectional迭代器和Random-access迭代器。每个迭代器类型的特点和常用操作都有详细说明,例如Output迭代器的写入操作,Input迭代器的读取操作,以及Random-access迭代器的随机访问能力。

548

被折叠的 条评论
为什么被折叠?



