STL列出对倒数第二个元素的访问

时间:2012-07-12 10:15:26

标签: c++ list stl

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

3 个答案:

答案 0 :(得分:3)

请注意,一般情况下,不保证为每个容器编译--mylist.end()

例如,如果在发布模式下使用std::vectorstd::array,则mylist.end()可能是原始指针,并且您无法递减函数返回值的指针。< / p>

在检查列表足够长时,当然是在C ++ 11中解决此问题的一般解决方案是std::prev(std::prev(mylist.end()))。您需要#include <iterator>

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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