std::advance
来自cppreference.com
| 在标头 <iterator> 定义
|
||
| |
(C++17 前) | |
| |
(C++17 起) | |
增加给定的迭代器 it 向前 n 个元素。
如果 n 为负,那么迭代器会自减。此时 InputIt 必须满足老式双向迭代器 (LegacyBidirectionalIterator) ,否则行为未定义。
参数
| it | - | 要推进的迭代器 |
| n | - | it 应推进的元素数
|
| 类型要求 | ||
-InputIt 必须满足老式输入迭代器 (LegacyInputIterator) 。
| ||
返回值
(无)
复杂度
线性。
然而,如果 InputIt 额外满足老式随机访问迭代器 (LegacyRandomAccessIterator) ,那么复杂度是常数。
注解
如果指定的自增或自减序列要求一个不可自增迭代器(例如尾后迭代器)自增,或不可自减迭代器(例如首迭代器或持有奇异值的迭代器)自减,那么行为未定义。
可能的实现
| 非 constexpr 版本 |
|---|
|
| constexpr 版本 |
|
示例
运行此代码
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v{3, 1, 4};
auto vi = v.begin();
std::advance(vi, 2);
std::cout << *vi << ' ';
vi = v.end();
std::advance(vi, -2);
std::cout << *vi << '\n';
}
输出:
4 1
参阅
(C++11) |
令迭代器自增 (函数模板) |
(C++11) |
令迭代器自减 (函数模板) |
| 返回两个迭代器间的距离 (函数模板) | |
(C++20) |
令迭代器前进给定的距离或到给定的边界 (算法函数对象) |