Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较分别从容器中获取的迭代器是否有效?_C++_Stl - Fatal编程技术网

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()
(假设为单线程上下文)。