比较从容器中分别获得的迭代器是否有效?

时间:2010-07-21 02:56:21

标签: c++ stl

例如,这个表达式在语义上是否有效?

container.begin() == container.begin();

2 个答案:

答案 0 :(得分:11)

是的,只要迭代器都没有失效。

例如,以下内容无效:

std::deque<int> d;

std::deque<int> begin1 = d.begin();
d.push_front(42);                   // invalidates begin1!
std::deque<int> begin2 = d.begin();
assert(begin1 == begin2);           // wrong; you can't use begin1 anymore.

答案 1 :(得分:4)

是的,begin()将返回给定容器实例的相同迭代器,除非您以某种方式更改容器(end()也具有此属性)。例如,std::vector::push_back()可能导致重新分配数组以容纳新元素。