所有标准库容器都可以使用迭代器,但是只有少数几种才支持下标运算符,所以对于容器,尽量不使用下标运算符
有迭代器的容器都拥有返回一个迭代器的成员,比如begin
和end
,begin
成员会返回一个迭代器,指向第一个元素。end
成员返回一个迭代器,指向尾元素的下一个位置,并无实际意义,如果容器为空,则begin
和end
返回同一个迭代器。都是尾迭代器。
迭代器运算符
- *iter 返回迭代器iter所指元素的引用
- iter->mem 等价于(*iter).mem //引用名为mem的成员
- ++iter 令iter指向容器的下一个元素
- –iter 令iter指向容器的上一个元素
- iter1==iter2 判断是否迭代器相同
- iter1!=iter2 判断是否不同
注意:不能end返回的迭代器进行递增或解引用操作
迭代器和泛型编程
为何for循环不用<
,而用!=
进行判断,因为大多标准库容器的迭代器没有定义<
运算符,而所有的标准库容器都定义了==
和!=
。
迭代器类型:
**iterator
**和**const_iterator**
:
使用环境:如果vector对象或string对象是一个常量,只能使用const_iterator
,不是常量则都可以。
若对象是常量,则begin
和end
返回const_iterator
。
注意:C++11引入两个新函数,反别为cbegin
,cend
,它们返回的迭代器类型都是const_iterator
,不管该对象是否为常量。
解引用(*iter)可获得迭代器所指向的对象,若该对象是类,则可能访问它的成员。
(*it).empty();