繁体   English   中英

反向迭代器未按预期工作 C++

[英]Reverse Iterator not working as expected C++

嘿,我想知道为什么这段代码不给 output 1。


    vector<int> myVector{1, 2, 3, 4, 6};
    cout << *myVector.rend() << endl;

Output 应该是 1 但它给出随机数。

但在这个例子中,一切都很好。


    vector<int> myVector{1, 2, 3, 4, 6};
    cout << *myVector.rbegin() << endl;

Output:6

谢谢。

end()指向最后一个元素之后的 memory 位置。 同样, rend()指向第一个元素之前的 memory 位置。 它们应该用作标记值——即迭代直到达到该点。 因此,要打印 1,您应该使用:

cout << *(myVector.rend()-1) << endl;

“结束”迭代器实际上是“结束”并且不可取消引用,无论它们是正向还是反向。

顺便说一句:为您启用诊断模式 C++ stdlib。 它会告诉你有什么问题。 你如何做到这一点取决于编译器和标准库。

end()给出“范围之后的一项”的无效迭代器相同的方式, rend()给出“范围之前的一项”的无效迭代器。 因此,您的第一个示例输出 memory 中该位置的任何半随机数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM