C++列出迭代器reverse_iterator
C++ list iterator reverse_iterator
可能的重复项:
为什么 std::list 上的push_back会更改使用 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
的位置会改变。
这是否应被视为不一致?对我来说,其中一个移动而另一个保持不变真的没有任何意义。
提前谢谢。 :)
std::list
不会使迭代器失效。正如您在常规迭代器中看到的那样,即使在修改列表后,std::list
上的迭代器也会指向同一元素。
另一方面,反向迭代器是作为std::reverse_iterator<iterator>
实现的,根据C++ STL 文档,它维护一个迭代器,指向迭代器返回的元素之前的元素,在这种情况下是列表的末尾。
相关文章:
- 错误:未在此范围内声明'reverse'
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 使用to_string、reverse、stoi组合的C++反转编号给出运行时错误实例超出范围
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- "How to make a recursive call for palindrom numbers without reverse function in c++?"
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"