我有一个 std::list<double> foo;
我正在使用
if (foo.size() >= 2){
double penultimate = *(--foo.rbegin());
}
Run Code Online (Sandbox Code Playgroud)
但这总是给我任意的价值penultimate.
我究竟做错了什么?
Bat*_*eba 67
你应该增加它,而不是递减 rbegin,如下所示:1
double penultimate = *++foo.rbegin();
Run Code Online (Sandbox Code Playgroud)
as rbegin()返回一个反向迭代器,++操作符也在容器中向后移动.请注意,我还删掉了多余的括号:这并不是每个人的口味.
目前您的程序的行为是未定义的,因为您实际上正在移动end(),并且您不允许取消引用该程序.输出的任意性质是未定义行为的表现.
1请保留您当前拥有的最小尺寸检查.
Gre*_*rie 27
在我看来,最明确的方法是使用为此目的而设计的构造(C++ 11):
double penultimate = *std::prev(foo.end(), 2)
Run Code Online (Sandbox Code Playgroud)
Meh*_*dad 11
我会做的*--(--foo.end()); 不需要反向迭代器.它也不那么混乱了.
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |