std::
advance
函数模板 <iterator>
template <class InputIterator, class Distance>
void advance (InputIterator& it, Distance n);
|
向前移动迭代器
将迭代器向前移动n个元素的位置。
如果是随机访问迭代器,则该函数只使用一次operator+或operator-。
否则,该函数将重复使用递增或递减操作符(operator++或operator——),直到增加n个元素为止。
🐭 参数
-
it
-
要移动的迭代器。
InputIterator至少应该是一个输入迭代器。
-
n
-
移动n个元素位置。
这仅适用于随机访问和双向迭代器。
Distance应该是一个数值类型,能够表示该类型迭代器之间的距离。
🔙 返回值
none
🍅 示例
// 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的线性。
↜ 迭代器的有效性
向前移动输入迭代器(至少不是前向迭代器)可能会使从其值获得的任何迭代器、指针和引用失效。
⇄ 数据竞争
该函数会修改迭代器,但不会解除对迭代器的引用(调用不会访问任何指向对象)。
还要注意上面描述的对迭代器有效性的影响。
🐚 异常安全性
如果在迭代器上执行的任何算术操作抛出,则抛出,并提供与此类操作相同级别的保证。
🍄 另请参阅