- 迭代器的简介:
- 迭代器类似于指针类型,它也提供了对对象的间接访问
- 指针是C语言中就有的东西,而迭代器是C++中才有的
- 迭代器提供一个对容器对象或者string对象访问的方法,并且定义了容器范围
- 使用迭代器:
- 和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员,比如,容器都有的成员begin和end,其中begin成员负责返回指向容器第一个元素的迭代器,如:auto b = v.begin();end成员则负责返回指向容器的尾元素的下一个位置的迭代器,也就是说指向的是容器的一个本不存在的尾部。
- 如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。
- 迭代器运算符:
1 *iter 返回迭代器iter所指元素的引用
2 iter->men 解引用iter并获得该元素的名为men的成员,相当于(*iter).men
3 ++iter 令iter指向容器的下一个元素
4 --iter 令iter指向容器的上一个元素
5 iter1==iter2 如果两个迭代器指向的是同一个元素或者指向同一个容器的尾后迭代器,则相等
- 迭代器的类型:
- 实际上拥有迭代器的标准库类型使用iterator和const_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新引入了两个新函数,分别是cbegin和cend,类似于begin和end,不同之乎在于只能返回const_iterator.
- 注意:但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素
- 迭代器运算:
1iter + n 迭代器加上一个数值仍得一个迭代器,所指位置向前移动n个元素
2iter - n 迭代器减去一个数值仍得一个迭代器,所指位置向后移动n个元素
3iter += n 等价于iter + n
4iter -= n 等价于iter - n
5iter1 - iter2 两个迭代器相减的结果是他们之间距离,其类型是名为difference_type的带符号整数
6 >、>=、<、<= 位置离begin近的元素较小