如何获得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一个临时的。