如何在不创建临时和修改列表的情况下获取STL列表中倒数第二个元素的迭代器?
是否有可能只说:--(--mylist.end())
?或者由于前缀减少,这会改变列表的end
迭代器吗?
答案 0 :(得分:3)
请注意,一般情况下,不保证为每个容器编译--mylist.end()
。
例如,如果在发布模式下使用std::vector
或std::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;