如何获取列表中的倒数第二个元素
How can I get the penultimate element in a list?
>我有一个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())
;不需要反向迭代器。它也不那么令人困惑。
相关文章:
- 如何找到数组中值倒数第二次出现的索引
- 如何打印第一个和最后一个元素的和,然后打印第二个和倒数第二个元素的总和,依此类推
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 期望_DEATH的倒数是多少
- 如何获取列表中的倒数第二个元素
- 对于我扩展此程序来计算最高10x10矩阵的倒数的最简单方法是什么
- C++迭代到倒数第二个元素
- C++ 安全倒数到零"auto"整型
- 为什么我需要绑定姿势矩阵的倒数来计算动画
- 收藏中倒数第二的模板;reverse_iterator无法编译
- 如何从multi_index_container获取倒数第二个元素
- STL列表访问倒数第二个元素
- 如何在C++中找到向量中倒数第二个元素
- 在c++中不改变倒数第二位的情况下移动整数中的位
- 在迭代器中检查是否倒数第二
- 如何找到六位数的倒数第二位
- 从文件中重新读取int到数组中,倒数第二个元素总是错误的
- 获取 4 位整数的倒数第二个值
- 检查std::map的迭代器是否指向倒数第二个元素
- c++ map:第一次调用map[a],如何初始化map[a].倒数第二