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

问题描述

嘿,我想知道为什么这段代码没有给输出 1。


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

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

在这个例子中一切正常。


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

输出:6

谢谢。

解决方法

Invoke-command 指向最后一个元素之后的内存位置。同样,end() 指向内存位置 之前的第一个元素。它们应该被用作哨兵值——即迭代直到达到那个点。 因此,要打印 1,您应该使用:

rend()
,

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

顺便说一句:为您的 C++ stdlib 启用诊断模式。它会告诉你出了什么问题。你怎么做取决于编译器和标准库。

,

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