假设我有一个std::list<int> lst
和一些std::list<int>::iterator it
用于遍历列表。并且依赖于it
我想在代码中使用it + 1
或it - 1
的价值。是否有一些好方法可以像next()
,prev()
那样(我在stl文档中找不到这样的东西)?或者我应该每次复制it
并递增(递减)副本吗?
答案 0 :(得分:46)
是的,自C ++ 11以来,您正在寻找的两种方法称为std::prev
和std::next
。您可以在迭代器库中找到它们。
来自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
答案 1 :(得分:19)
复制和递增/递减副本是唯一可行的方法。
你可以编写包装函数来隐藏它(正如答案中提到的,C ++ 11有std :: prev / std :: next,它就是这样做的(Boost定义了类似的函数)。但是它们是这个的包装器“复制和增加”操作,所以你不必担心你做错了“。
答案 2 :(得分:6)
一个简单的预先解决方案是来自Boost.utility
的prior
和next
。他们利用operator--
和operator++
但不要求您创建临时。