迭代器的加减法

scorlw 发布于

迭代器的加减法

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