如何获得std :: list中的next(previous)元素而不递增(递减)迭代器?
说我有一个std::list<int> lst和一些std::list<int>::iterator it迭代通过列表。 并依赖于it价值,我想在我的代码中使用it + 1或it - 1 。 是否有一些好的方法来做像next() , prev() (我无法在stl文档中find这样的东西)? 或者我应该每次复制it并增加(减less)副本?
拷贝和增加/减less拷贝是可以完成的唯一方法。
你可以编写包装函数来隐藏它(正如答案中所提到的那样,C ++ 11有std :: prev / std :: next就可以做到这一点(而Boost定义了类似的函数),但是它们是“增量“操作,所以你不必担心你做错了。
是的,从C ++ 11开始,有两种方法叫做std::prev和std::next 。 你可以在迭代器库中find它们。
来自cppreference.com的示例
#include <iostream> #include <iterator> #include <vector> int main() { std::list<int> v{ 3, 1, 4 }; auto it = v.begin(); auto nx = std::next(it, 2); std::cout << *it << ' ' << *nx << '\n'; }
输出:
3 4
Boost.utility是一个简单的预览解决scheme。 他们利用operator--和operator++优势,但不要求你创build一个临时的。