tag 标签: 迭代器

相关博文
  • 热度 22
    2016-3-15 15:47
    949 次阅读|
    2 个评论
    访问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循环里面,我们经常使用“!=”来做条件判断,而不是“”。 这是因为很多迭代器并没有提供“”操作,为了通用性,就都使用“!=”吧。 ---------------- 迭代器的类型: vectorint::iterator it; string::iterator it2; vectorint::const_iterator it3; string::const_iterator it4; 当不能使用auto获取迭代器类型时,可以精确的指定它。 使用const_iterator意味着元素可读但不可修改。 const类型的string或容器,只能使用const_iterator做迭代。 ---------------- vectorint v; const vectorint 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的范围!!! 任何时刻都不能!!!