如何获得列表中的倒数第二个元素?
我有一个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())
; 不需要反向迭代器。 它也不那么混乱。