C++ 比较分别从容器中获取的迭代器是否有效?
例如,这个表达式在语义上是否有效C++ 比较分别从容器中获取的迭代器是否有效?,c++,stl,C++,Stl,例如,这个表达式在语义上是否有效 container.begin() == container.begin(); 是的,begin()将返回给定容器实例的相同迭代器,除非您以某种方式更改容器(end()也具有此属性)。例如,std::vector::push_back()可能会导致重新分配数组以容纳新元素。是,只要两个迭代器都未失效 例如,以下内容无效: std::deque<int> d; std::deque<int> begin1 = d.begin(); d.
container.begin() == container.begin();
是的,
begin()
将返回给定容器实例的相同迭代器,除非您以某种方式更改容器(end()
也具有此属性)。例如,std::vector::push_back()
可能会导致重新分配数组以容纳新元素。是,只要两个迭代器都未失效
例如,以下内容无效:
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.
std::deque d;
std::deque begin1=d.begin();
d、 向前推(42);//使开始无效!
std::deque begin2=d.begin();
断言(begin1==begin2);//错;你不能再使用begin1了。
小心使用术语相同
。我不认为所有容器都会为同一项返回相同的迭代器。尽管与==相比,它们的比较结果是相等的。Martin York的评论仍然有效:对begin()
的每次调用将返回不同的迭代器,即使它们比较相同。这在这个时候是很挑剔的,但是迭代器将不一样<代码>&c.开始()!=&c、 begin()即使c.begin()==c.begin()
(假设为单线程上下文)。