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

How can I get the penultimate element in a list?

本文关键字:倒数 倒数第二 第二个 元素 列表 何获取 获取      更新时间:2023-10-16

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

我正在使用

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

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

我做错了什么?

与其

递减rbegin,不如递增它,如下所示:1

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

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

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


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

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

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

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