可能重复:
Why does a push_back on an std::list change a reverse iterator initialized with rbegin?
我得到了一段代码如下:
#include <iostream>
#include <list>
int main(){
std::list<int> l;
l.push_back(1);
l.push_back(2);
std::list<int>::iterator it = l.begin();
std::cout << *it << std::endl; // 1
l.push_front(0);
std::cout << *it << std::endl; // 1
std::list<int>::reverse_iterator rit = l.rbegin();
std::cout << *rit << std::endl; // 2
l.push_back(3);
std::cout << *rit << std::endl; // 3
}
输出:
1
1
2
3
在我定义前向迭代器it
之后,如果我调用push_front()
,it
的位置将不会改变。但是,在我定义reverse_iterator rit
后,如果我调用push_back()
,rit
的位置将会改变。
这应该被视为不一致吗?对我来说,其中一个移动而另一个保持不变,这对我没有任何意义。
提前致谢。 :)
答案 0 :(得分:-1)
std::list
不会使迭代器失效。正如您在常规迭代器中看到的那样,即使在修改列表之后,std::list
上的迭代器也指向相同的元素。
std::reverse_iterator<iterator>
,根据C++ STL documentation,维护一个迭代器,指向之前的元素返回的元素。迭代器,在本例中是列表的结尾。