如何在不创建临时列表和修改列表的情况下获取 STL 列表中倒数第二个元素的迭代器?是否可以只说:--(--mylist.end())
?或者这会end
由于前缀递减而改变列表的迭代器吗?
问问题
1192 次
3 回答
3
请注意,一般来说,--mylist.end()
不保证为每个容器编译。
例如,如果您在释放模式下使用std::vector
或,则可能是原始指针,并且您不能递减由函数返回的值的指针。std::array
mylist.end()
C++11 中这个问题的一个通用解决方案是std::prev(std::prev(mylist.end()))
,当然,在检查列表是否足够长之后。你需要#include <iterator>
为此。
于 2012-07-12T10:24:45.670 回答
3
您可以使用std::advance和 reverse_iterator:
SomeContainerType::reverse_iterator it = myList.rbegin();
std::advance(it, 1); // next to last element
即使有问题的迭代器类型不支持,这也有效operator+
。
于 2012-07-12T10:44:48.767 回答
2
如果可以接受 a reverse_iterator
,那么:some_list.rbegin() + 1;
于 2012-07-12T10:17:42.130 回答