c++ - 如何获取列表中的倒数第二个元素?

标签 c++ stl stdlist

我有一个 std::list<double> foo;

我正在使用

if (foo.size() >= 2){
    double penultimate = *(--foo.rbegin());
}

但这总是给我一个任意值penultimate .

我做错了什么?

最佳答案

而不是递减 rbegin,你应该递增它,如下所示:1

double penultimate = *++foo.rbegin();

由于rbegin()返回的是一个反向迭代器,所以++是容器中向后移动的操作符。请注意,我还删除了多余的括号:这不符合每个人的口味。

目前你的程序的行为是undefined,因为你实际上正在移动到end(),你不能取消引用它。输出的任意性质是这种未定义行为的表现。


1请保留您目前拥有的最小尺寸检查。

关于c++ - 如何获取列表中的倒数第二个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44206521/

相关文章:

c++ - 非构造函数上的函数 try block 有什么缺点吗?

c++ - 内存中的多维数组

c++ - 数组未正确返回

c++ - C++ 中的 key_compare 与 key_comp

c++ - 使用模板 <class InputIterator> string (InputIterator begin, InputIterator end) 时出现奇怪的错误;

c++ - 为什么我不能在 Mac OS X 上读取和追加 std::fstream?

c++ - 如何用链表替换 std::vector?

c++ - 包含 std::function 的 std::list

c++ - 检查 std::list 迭代器是否在没有访问容器的情况下结束

c++ - stringstream 输出的原因是什么?