function template
<iterator>

std::advance

template <class InputIterator, class Distance>  void advance (InputIterator& it, Distance n);
前进迭代器
将迭代器it推进n个元素位置。

如果it随机访问迭代器,则该函数仅使用一次operator+operator-。否则,该函数会重复使用递增或递减运算符(operator++operator--),直到推进n个元素为止。

参数

it
要推进的迭代器。
InputIterator 至少应是输入迭代器
n
要推进的元素位置数。
对于随机访问双向迭代器,此值才可以为负。
Distance 应为一种数值类型,能够表示此类型迭代器之间的距离。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// advance example
#include <iostream>     // std::cout
#include <iterator>     // std::advance
#include <list>         // std::list

int main () {
  std::list<int> mylist;
  for (int i=0; i<10; i++) mylist.push_back (i*10);

  std::list<int>::iterator it = mylist.begin();

  std::advance (it,5);

  std::cout << "The sixth element in mylist is: " << *it << '\n';

  return 0;
}

输出

The sixth element in mylist is: 50


复杂度

随机访问迭代器 的常量。
否则,线性复杂度为 n

迭代器有效性

推进一个不是至少前向迭代器输入迭代器可能会使从其值获得的任何迭代器、指针和引用失效。

数据竞争

该函数修改迭代器,但从不进行解引用(调用不会访问任何指向的对象)。
另请注意上面描述的对迭代器有效性的影响。

异常安全

如果对迭代器执行的任何算术运算抛出异常,则此函数将抛出异常,并提供与这些运算相同的保证级别。

另见