C++迭代器

  • 迭代器的简介:
    • 迭代器相似于指针类型,它也提供了对对象的间接访问
    • 指针是C语言中就有的东西,而迭代器是C++中才有的
    • 迭代器提供一个对容器对象或者string对象访问的方法,而且定义了容器范围
  • 使用迭代器:
    • 和指针不同的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员,好比,容器都有的成员beginend,其中begin成员负责返回指向容器第一个元素的迭代器,如:auto b = v.begin();end成员则负责返回指向容器的尾元素的下一个位置的迭代器,也就是说指向的是容器的一个本不存在的尾部。
    • 若是容器为空,则beginend返回的是同一个迭代器,都是尾后迭代器。
  • 迭代器运算符:
1 *iter    返回迭代器iter所指元素的引用
2 iter->men    解引用iter并得到该元素的名为men的成员,至关于(*iter).men
3 ++iter    令iter指向容器的下一个元素
4 --iter    令iter指向容器的上一个元素
5 iter1==iter2    若是两个迭代器指向的是同一个元素或者指向同一个容器的尾后迭代器,则相等
  • 迭代器的类型:
    • 实际上拥有迭代器的标准库类型使用iteratorconst_iterator来表示迭代器的类型:
1vector<int>::iterator it;//it能够读写vector<int>的元素
2string::iterator it2;//it2能够读写string对象中的字符
3 
4vector<int>::const_iterator it3;//it3只能读元素,不能写元素
5string::const_iterator it4;//it4只能读字符,不能写字符
    • const_iterator和常量指针差很少,能读取但不能修改它所指的元素值,而iterator可读可写。若是容器或string对象是一个常量,只能使用const_iterator,若是不是常量,那么既能使用iterator又能使用const_iterator
    • 若是容器或对象只需读操做而无需写操做的话最好使用常量类型(const_iterator),为了便于获取常量迭代器,C++11新引入了两个新函数,分别是cbegincend,相似于beginend,不一样之乎在于只能返回const_iterator.
    • 注意:但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素
  • 迭代器运算:
1iter + n    迭代器加上一个数值仍得一个迭代器,所指位置向前移动n个元素
2iter - n    迭代器减去一个数值仍得一个迭代器,所指位置向后移动n个元素
3iter += n    等价于iter + n
4iter -= n    等价于iter - n
5iter1 - iter2    两个迭代器相减的结果是他们之间距离,其类型是名为difference_type的带符号整数
6 >、>=、<、<=    位置离begin近的元素较小
相关文章
相关标签/搜索