如何解决反向迭代器无法按预期工作 C++
vector<int> myVector{1,2,3,4,6};
cout << *myVector.rend() << endl;
但在这个例子中一切正常。
vector<int> myVector{1,6};
cout << *myVector.rbegin() << endl;
输出:6
谢谢。
解决方法
Invoke-command
指向最后一个元素之后的内存位置。同样,end()
指向内存位置 之前的第一个元素。它们应该被用作哨兵值——即迭代直到达到那个点。
因此,要打印 1,您应该使用:
rend()
,
“结束”迭代器实际上是“结束”并且不可取消引用,无论它们是向前还是向后。
顺便说一句:为您的 C++ stdlib 启用诊断模式。它会告诉你出了什么问题。你怎么做取决于编译器和标准库。
,以同样的方式,end()
给出一个无效迭代器“范围之后的一项”,rend()
给出一个无效迭代器“范围之前的一项”。因此,您的第一个示例输出内存中该位置的任何半随机数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。