迭代器的加减法
c++
迭代器并不是都可以进行加减
迭代器实质上是一个指针,但是,并不是所有的容器的迭代器可以支持加减操作。
能进行算术运算的迭代器只有随机访问迭代器,要求容器元素存储在连续内存空间内,即
- vector、string、deque的迭代器是有加减法的;
- 而map、set、multimap、multiset、list的迭代器是没有加减法的。他们仅支持
++itr
、–itr
这些操作。 - unordered_map 容器迭代器的类型为前向迭代器(又称正向迭代器)。这意味着,假设 p 是一个前向迭代器,则其只能进行 *p、p++、++p 操作,且 2 个前向迭代器之间只能用 == 和 != 运算符做比较。(unordered_set)应该也是。
it++与++it的区别
在STL中的容器使用迭代器进行遍历时,可以有it++与++it的效果是相同的,遍历的次数也是相同的,但是在STL中效率却不同:
++it(或–it)返回的是引用。
it++(或it–)返回的是临时对象。
因为iterator是类模板,使用it++这种形式要返回一个无用的临时对象,而it++是函数重载,所以编译器无法对其进行优化,所以每遍历一个元素,你就创建并销毁了一个无用的临时对象。
原文地址:https://blog.csdn.net/lym940928/article/details/88905175