STL列表访问倒数第二个元素

STL list access to next-to-last element

本文关键字:第二个 元素 倒数第二 倒数 列表 访问 STL      更新时间:2023-10-16

如何在不创建临时列表和修改列表的情况下,将迭代器移到STL列表中倒数第二个元素?是否可以只说:--(--mylist.end())?或者,由于前缀递减,这会改变列表的end迭代器吗?

请注意,通常情况下,--mylist.end()不能保证为每个容器编译。

例如,如果在发布模式中使用std::vectorstd::array,则mylist.end()可能是一个原始指针,并且不能递减函数值返回的指针。

当然,在检查列表是否足够长之后,C++11中这个问题的通用解决方案是std::prev(std::prev(mylist.end()))。为此,您需要#include <iterator>

您可以使用std::advance和reverse_iterator:

SomeContainerType::reverse_iterator it = myList.rbegin();
std::advance(it, 1); // next to last element

即使有问题的迭代器类型不支持operator+,这也能工作。

如果reverse_iterator可以,则:some_list.rbegin() + 1;