C ++列表迭代器reverse_iterator

时间:2012-09-22 03:50:30

标签: c++ stdlist

  

可能重复:
  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的位置将会改变。

这应该被视为不一致吗?对我来说,其中一个移动而另一个保持不变,这对我没有任何意义。

提前致谢。 :)

1 个答案:

答案 0 :(得分:-1)

std::list不会使迭代器失效。正如您在常规迭代器中看到的那样,即使在修改列表之后,std::list上的迭代器也指向相同的元素。

另一方面,反向迭代器实现为std::reverse_iterator<iterator>,根据C++ STL documentation,维护一个迭代器,指向之前的元素返回的元素。迭代器,在本例中是列表的结尾。