如何在列表中获得倒数第二个元素?

时间:2017-05-26 16:47:26

标签: c++ stl stdlist

我有std::list<double> foo;

我正在使用

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

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

我做错了什么?

3 个答案:

答案 0 :(得分:67)

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

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

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

目前,您的程序的行为是 undefined ,因为您实际上已转移到end(),并且您不能取消引用该程序。输出的任意性质是未定义行为的表现。

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

答案 1 :(得分:26)

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

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

答案 2 :(得分:11)

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