原创
【博客大赛】《C++ Primer》学习笔记(九)迭代器
访问string或者vector的元素,下标是一种常见的方法。
更通用的方法是迭代器(iterators)。
库中的所有容器都支持迭代器,但只有它们之中的少数支持下标。
string并不是容器,尽管它的很多操作和容器很像。
string也支持迭代器。
迭代器类似指针。
迭代器和指针的使用方法不一样。
获取第一个元素和最后一个元素:
auto b = v.begin(), e = v.end();
v.begin()获取到的是第一个元素;
v.end()获取到的元素是最后一个后面的那个,它实际上是不存在的。
迭代器可进行的操作很少:
*iter //返回元素的引用
iter->mem //取元素的mem成员,相当于(*item).mem
++iter //迭代器自增
--iter //迭代器自减
iter1 == iter2 //判断两个迭代器是否相等
iter1 != iter2 //判断两个迭代器是否不等
在C++的for循环里面,我们经常使用“!=”来做条件判断,而不是“<”。
这是因为很多迭代器并没有提供“<”操作,为了通用性,就都使用“!=”吧。
----------------
迭代器的类型:
vector<int>::iterator it;
string::iterator it2;
vector<int>::const_iterator it3;
string::const_iterator it4;
当不能使用auto获取迭代器类型时,可以精确的指定它。
使用const_iterator意味着元素可读但不可修改。
const类型的string或容器,只能使用const_iterator做迭代。
----------------
vector<int> v;
const vector<int> cv;
auto it1 = v.begin();
auto it2 = cv.begin();
如果vector是nonconst的,则iterator也是nonconst的;
如果vector是const的,则iterator也是const的。
要是我们使得nonconst的vector返回const的iterator呢?
auto it3 = v.cbegin();
auto it4 = v.cend();
两个interator之差的数据类型是difference_type,string和vector都定义了它。
size_type是无符号的数,difference_type是有符号的数。
对iterator进行操作的时候,时刻记住它的值不可超过容器或string的范围!!!
任何时刻都不能!!!
DiracFatCat 2016-3-16 23:12
用户595347 2016-3-16 07:47