C++ STL advance()函数(深入了解,一文学会)
advance() 函数用于将迭代器前进(或者后退)指定长度的距离。
template <class InputIterator, class Distance>
void advance (InputIterator& it, Distance n);
其中 it 指的是目标迭代器,n 通常为一个整数。
需要注意的是,如果 it 为输入迭代器或者前向迭代器,则 n 必须为一个正数,即表示将 it 右移(前进) n 个位置;反之,如果 it 为双向迭代器或者随机访问迭代器,则 n 为正数时表示将 it 右移(前进) n 个位置,n 为负数时表示将 it 左移(后退) n 个位置。
另外,根据 it 类型是否为随机访问迭代器,advance() 函数底层采用了不同的实现机制:
- 当 it 为随机访问迭代器时,由于该类型迭代器支持 p+n 或者 p-n(其中 p 就是一个随机访问迭代器)运算,advance() 函数底层采用的就是 it+n 操作实现的;
- 当 it 为其他类型迭代器时,它们仅支持进行 ++ 或者 -- 运算,这种情况下,advance() 函数底层是通过重复执行 n 个 ++ 或者 -- 操作实现的。
本文作者原创,转载请附上文章出处与本文链接。
C++ STL advance()函数(深入了解,一文学会)目录
1 advance()函数成员函数
2 advance()函数示例
2.1 forward_list 容器
2.2 vector 容器
1 advance()函数成员函数
迭代器辅助函数 | 功能 |
---|---|
advance(it, n) | it 表示某个迭代器,n 为整数。该函数的功能是将 it 迭代器前进或后退 n 个位置。 |
distance(first, last) | first 和 last 都是迭代器,该函数的功能是计算 first 和 last 之间的距离。 |
begin(cont) | cont 表示某个容器,该函数可以返回一个指向 cont 容器中第一个元素的迭代器。 |
end(cont) | cont 表示某个容器,该函数可以返回一个指向 cont 容器中最后一个元素之后位置的迭代器。 |
prev(it) | it 为指定的迭代器,该函数默认可以返回一个指向上一个位置处的迭代器。注意,it 至少为双向迭代器。 |
next(it) | it 为指定的迭代器,该函数默认可以返回一个指向下一个位置处的迭代器。注意,it 最少为前向迭代器。 |
2 advance()函数示例
2.1 forward_list 容器
forward_list 容器(仅支持使用前向迭代器)为例,下面程序演示了 advance() 函数的功能:
#include <iostream> // std::cout
#include <iterator> // std::advance
#include <forward_list>
using namespace std;//创建一个 forward_list 容器
forward_list<int> mylist{ 1,2,3,4 };
//it为前向迭代器,其指向 mylist 容器中第一个元素
forward_list<int>::iterator it = mylist.begin();
//借助 advance() 函数将 it 迭代器前进 2 个位置
advance(it, 2);
cout << "*it = " << *it;
此程序中,由于 it 为前向迭代器,其只能进行 ++ 操作,即只能前进(右移),所以 advance() 函数的第 2 个参数只能为正数。
2.2 vector 容器
以 vector 容器为例,演示了 advance() 函数的功能:
#include <iostream> // std::cout
#include <iterator> // std::advance
#include <vector>
using namespace std;//创建一个 vector 容器
vector<int> myvector{ 1,2,3,4 };
//it为随机访问迭代器,其指向 myvector 容器中第一个元素
vector<int>::iterator it = myvector.begin();
//借助 advance() 函数将 it 迭代器前进 2 个位置
advance(it, 2);
cout << "1、*it = " << *it << endl;
//继续使用it,其指向 myvector 容器中最后一个元素之后的位置
it = myvector.end();
//借助 advance() 函数将 it 迭代器后退 3 个位置
advance(it, -3);
cout << "2、*it = " << *it;
advance() 函数本身不会检测 it 迭代器移动 n 个位置的可行性,如果 it 迭代器的移动位置超出了合理范围,it 迭代器的指向将无法保证,此时使用 *it 将会导致程序崩溃。
以下博客部分内容借鉴自:http://c.biancheng.net/stl/。
C++ STL 容器、迭代器、适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120052137 C++ STL deque容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118676574
C++ STL vector容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118676109
C++ STL list容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118676917
C++ STL forward_list容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118687348
C++ STL array 容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118688364
C++ STL pair 类模板(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118714852
C++ STL map容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118741670
C++ STL map emplace()和emplace_hint()(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118771777
C++ STL multimap容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118773021
C++ STL Set容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/118918940
C++ STL multiset容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119624779
C++ STL unordered_map容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119689199
C++ STL unordered_set容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119709019
C++ STL unordered_multiset容器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119709079
C++ STL stack容器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119723782
C++ STL queue容器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119746246
C++ STL priority_queue容器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119770527
C++ STL reverse_iterator反向迭代器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119814820
C++ STL insert_iterator插入迭代器适配器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119834378
C++ STL stream_iterator流迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119834429
C++ STL streambuf_iterator流缓冲区迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119850048
C++ STL move_iterator移动迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/119859888
C++ STL advance()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008250
C++ STL distance()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008300
C++ STL iterator迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008346
C++ STL const_iterator转换为iterator类型迭代器(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008324
C++ STL begin()和end()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008459
C++ STL prev()和next()函数(深入了解,一文学会) https://blog.csdn.net/qq_37529913/article/details/120008481
C++ STL advance()函数(深入了解,一文学会)相关推荐
- stl vector 函数_在C ++ STL中使用vector :: begin()和vector :: end()函数打印矢量的所有元素...
stl vector 函数 打印向量的所有元素 (Printing all elements of a vector) To print all elements of a vector, we ca ...
- stl vector 函数_vector :: at()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: at()函数 (C++ vector::at() function) vector::at() is a library function o ...
- stl swap函数_vector :: swap()函数以及C ++ STL中的示例
stl swap函数 C ++ vector :: swap()函数 (C++ vector::swap() function) vector::swap() is a library functio ...
- stl vector 函数_vector :: crend()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: crend()函数 (C++ vector::crend() function) vector::crend() is a library f ...
- stl vector 函数_vector :: pop_back()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: pop_back()函数 (C++ vector::pop_back() function) vector::pop_back() is a ...
- stl vector 函数_vector :: push_back()函数,以及C ++ STL中的示例
stl vector 函数 C ++ vector :: push_back()函数 (C++ vector::push_back() function) vector::push_back() is ...
- stl min函数_std :: min()函数以及C ++ STL中的示例
stl min函数 C ++ STL std :: min()函数 (C++ STL std::min() function) min() function is a library function ...
- stl vector 函数_vector :: back()函数以及C ++ STL中的示例
stl vector 函数 C ++ vector :: back()函数 (C++ vector::back() function) vector::back() is a library func ...
- stl vector 函数_vector :: clear()函数,以及C ++ STL中的示例
stl vector 函数 C ++ vector :: clear()函数 (C++ vector::clear() function) vector::clear() is a library f ...
最新文章
- TI IPNC Web网页之网页修改教程
- 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
- 思科“万物互联”路线下一站:连接分析
- Javascript 事件propagation机制
- pip 删除安装包_Python中PIP的快速指南
- 计算机控制的点火系统由,第八节(点火系统)
- Office2003与Office2007默认打开方式的切换
- 滑盖、双屏手机降价至冰点,为何仍无人问津?
- 文件目录在Visual C++ 2005中使用 GNU Scientific Library
- 文献阅读-一种基于机器学习方法的海事监视雷达海杂波抑制方法
- 用HTML绘制三线表,CSS制作三线表 | 学步园
- OMNeT 例程 Tictoc12 学习笔记
- 计算机台式内存条,台式电脑怎么装内存条_台式电脑加装内存条方法-win7之家
- 11讲项目实战首页右侧悬浮框及内页面包屑导航
- 时间序列(ARIMA)模型
- 武汉大学计算机学院宿舍楼名称,武汉大学寝室排名 寝室图片
- 时序违例的原因及其解决办法
- 如何在阿里云物联网平台新增一个设备
- 【map】高德地图点聚合—按索引聚合
- cdh 简介_CDH的介绍和部署