C++ STL列表访问上一个元素的下一个元素
如何让迭代器指向STL列表中倒数第二个元素,而不创建临时元素并修改列表?C++ STL列表访问上一个元素的下一个元素,c++,list,stl,C++,List,Stl,如何让迭代器指向STL列表中倒数第二个元素,而不创建临时元素并修改列表? 是否可以只说:--(-mylist.end())?或者这会因为前缀减量而改变列表的结束迭代器吗?如果可以使用反向迭代器,则:一些列表.rbegin()+1请注意,一般来说,--mylist.end()不保证为每个容器编译 例如,如果在发布模式下使用std::vector或std::array,mylist.end()可能是原始指针,并且不能减少函数返回值的指针 当然,在检查列表是否足够长之后,C++11中解决此问题的一般方
是否可以只说:
--(-mylist.end())
?或者这会因为前缀减量而改变列表的结束
迭代器吗?如果可以使用反向迭代器
,则:一些列表.rbegin()+1代码>请注意,一般来说,--mylist.end()
不保证为每个容器编译
例如,如果在发布模式下使用std::vector
或std::array
,mylist.end()
可能是原始指针,并且不能减少函数返回值的指针
当然,在检查列表是否足够长之后,C++11中解决此问题的一般方法是std::prev(std::prev(mylist.end())
。为此,您需要#包括。您可以使用和反向迭代器:
SomeContainerType::reverse_iterator it = myList.rbegin();
std::advance(it, 1); // next to last element
即使所讨论的迭代器类型不支持operator+
您可能想看看这个:有趣。但是为什么我不能减少由值返回的指针呢。这就是为什么它不更改end
迭代器本身,因为按值返回是因为对按值返回的函数的调用是右值,但标量(如int或原始指针)的--
运算符需要左值。只要试试--newt()代码>,您将得到一个编译器错误,说“需要作为减量操作数的左值”或类似的话。另一方面,在临时对象上调用操作符--
也很好,只要它是作为成员函数实现的。实际上,它不适用于后缀--
,因为后缀通常作为一个自由函数实现(就前缀--
而言,以避免代码重复),不作为成员函数。假设some_list
是std::list
迭代器将不支持operator+
std::list支持双向迭代器;正如Nim所说,只需调用方法rbegin(),并使用操作符++或向前迭代器获取以下元素:autoit=myList.end();std::advance(it,-2)代码>。