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

How can I get the penultimate element in a list?

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

我正在使用

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

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

我做错了什么?

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

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

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

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


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

我会做*--(--foo.end());不需要反向迭代器。它也不那么令人困惑了。

在我看来,最明确的方法是使用为此目的设计的结构 (C++11):

double penultimate = *std::prev(foo.end(), 2)