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

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

我在用着

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

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

我究竟做错了什么?

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

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

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

目前你的程序的行为是不确定的,因为你实际上正在移动到end() ,而且你不能解除引用。 输出的任意性质是未定义行为的performance。


1请保留您目前拥有的最小尺码。

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

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

我只是做*--(--foo.end()) ; 不需要反向迭代器。 它也不那么混乱。