如何获得std :: list中的next(previous)元素而不递增(递减)迭代器?

说我有一个std::list<int> lst和一些std::list<int>::iterator it迭代通过列表。 并依赖于it价值,我想在我的代码中使用it + 1it - 1 。 是否有一些好的方法来做像next()prev() (我无法在stl文档中find这样的东西)? 或者我应该每次复制it并增加(减less)副本?

拷贝和增加/减less拷贝是可以完成的唯一方法。

你可以编写包装函数来隐藏它(正如答案中所提到的那样,C ++ 11有std :: prev / std :: next就可以做到这一点(而Boost定义了类似的函数),但是它们是“增量“操作,所以你不必担心你做错了。

是的,从C ++ 11开始,有两种方法叫做std::prevstd::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一个临时的。