C++11中标准容器迭代器操作总结
我发现有必要对各类容器迭代器的操作做一个小小的总结,本文中的内容大多来自于《C++ Primer》(第5版)中相关章节的内容。
1.下面列出了容器迭代器支持的所有的操作(注意:forward_list迭代器不支持递减运算符(--))。
*iter 返回迭代器iter所指元素的引用
iter->mem 解引用iter并获取该元素名为mem的成员,等价于(*iter).mem
++iter 令iter指示容器中的下一个元素
--iter 令iter指示容器中的上一个元素
iter1 == iter2 判断两个迭代器是否相等(不相等),如果两个迭代器指示的是同一个
iter1 != iter2 元素或者它们是同一个容器的尾后迭代器,则相等;反之,不相等。
2.下面的运算只能用于string,vector,deque和array的迭代器。不能将它们用于其他任何容器类型的迭代器!!
iter + n 迭代器加上一个整数值仍得到一个迭代器,迭代器指示的新位置与原来相比向前移动了若干元 素。结果迭代器或者指示容器内的一个元素,或者指向容器尾的下一个位置
iter - n/iter += n/iter -=n 这三操作意思和上面差不多。。
iter1 - iter2 两个迭代器相减的结果是它们之间的距离,参与运算的两个迭代器必须指向的是同一个容器中 的元素或者尾元素后的位置
>、>=、<、<= 迭代器的关系运算符,如果某迭代器指向的容器位置在另一个迭代器所指位置之前,则说明前 者小于后者。参与运算的两个迭代器必须指向的是同一个容器中的元素或者尾元素后的位置
3.对于不同容器类型的迭代器,简单来说
顺序容器:
string、vector、deque和array 支持++、--、+n、-n.
forwar_list 支持++,然鹅不支持+n、-n、--.
list 支持++、--,然鹅不支持+n、-n.
关联容器:
set、map、multiset、multimap 支持++、--,然鹅不支持+n、-n.
unordered_set、unordered_map、unordered_multiset、unordered_multimap 支持++、--,然鹅不支持+n、-n.
注意:本文中的单独出现的++、--符号均包含了前置后置两种情况。