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

时间:2012-04-13 08:00:34

标签: c++ list iterator

假设我有一个std::list<int> lst和一些std::list<int>::iterator it用于遍历列表。并且依赖于it我想在代码中使用it + 1it - 1的价值。是否有一些好方法可以像next()prev()那样(我在stl文档中找不到这样的东西)?或者我应该每次复制it并递增(递减)副本吗?

3 个答案:

答案 0 :(得分:46)

是的,自C ++ 11以来,您正在寻找的两种方法称为std::prevstd::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.utilitypriornext。他们利用operator--operator++但不要求您创建临时。