假设我有一个std::list<int> lst
和一些std::list<int>::iterator it
用于迭代列表。并取决于it
我要使用的值it + 1
或it - 1
我的代码中的值。有什么好的方法可以做到这一点next()
,prev()
(我在 stl 文档中找不到这样的东西)?还是我应该it
每次复制并增加(减少)副本?
问问题
44092 次
3 回答
50
是的,因为 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
于 2012-04-13T08:04:32.517 回答
20
复制和增加/减少副本是唯一可以完成的方法。
您可以编写包装函数来隐藏它(正如答案中提到的,C++11 有 std::prev/std::next 可以做到这一点(并且 Boost 定义了类似的函数)。但它们是围绕这个“复制和增量”操作,所以你不必担心你做错了。
于 2012-04-13T08:37:58.617 回答
6
一个简单的预先确定的解决方案是prior
和next
来自Boost.utility
。他们利用operator--
但operator++
不要求您创建临时文件。
于 2012-04-13T08:03:32.580 回答