前言

最近在看《STLC++标准库》时了解到C++为迭代器提供了一些相关的辅助函数,方便我们对迭代器进行操作。


advance

功能: 修改迭代器位置,可使迭代器向前移动,也可使迭代器向后移动。
头文件: #include<iterator>
函数原型: void advance(Iterator pos, int n); pos指定的迭代器,n为移动的步长(向后移动为正数,向前移动为负数)。

#include <algorithm>
#include <vector>
#include <iterator>int main() {vector<int> arr{6,5,4,3,2,1};auto it = arr.begin();advance(it, 4); //向后移动4个单位cout << *it;advance(it,-1); //向前移动1个单位
}

运行结果:2 3
注意: advance函数并不会检查迭代器的位置是否越界。


next、prev

功能: c++中提供了前进与后退迭代器位置的函数,但于普通的++、–操作略有不同。
头文件: #include<iterator>
函数原型: Iterator next(Iterator pos) Iterator next(Iterator pos, int n) Iterator prev(Iterator pos) Iterator prev(Iterator pos, int n) pos为指定的迭代器,n为步长。可为负数,当n为负数时,表示向相反的方向移动对应的步长。

#include <algorithm>
#include <vector>
#include <iterator>int main() {vector<int> arr{6,5,4,3,2,1};auto it = arr.begin();it = next(it, 4); //向后移动4个单位//it = prev(it);cout << *it;it = next(it,-1); //向前移动1个单位//it = prev(it);cout << *it;
}

注意: next、prev函数并不会检查迭代器的位置是否越界。


distance

功能: 处理两个迭代器之间的距离。
头文件: #include <iterator>
函数原型: int distance(Iterator pos1, Iterator pos2)

#include <algorithm>
#include <vector>
#include <iterator>using namespace std;
int main() {vector<int> arr{6,5,4,3,2,1};auto it = arr.begin();it = next(it, 4);auto item = arr.begin();cout << distance(it, item);return 0;
}

注意:返回的结果与迭代器传入的顺序有关,如果pos1位置在pos2之后,则返回的结果为负值;该函数也不会判断迭代器位置是否越界。


iter_swap

功能: 交换两个迭代器所指的内容。
头文件: #include <iterator>
函数原型: voidd iter_swap(Iterator pos1, Iterator pos2) 迭代器的类型可以不同,但所指的元素必须能够相互赋值。

#include <algorithm>
#include <vector>
#include <iterator>using namespace std;
int main() {vector<int> arr{6,5,4,3,2,1};auto it = arr.begin();it = next(it, 4);auto item = arr.begin();iter_swap(it, item);return 0;
}

c++--STL迭代器相关辅助函数相关推荐

  1. C++中的迭代器(STL迭代器)iterator

    1.Cpp中的迭代器 要访问顺序容器和关联容器中的元素,需要通过迭代器(iterator)进行.迭代器是一个变量,相当于容器和操纵容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可以 ...

  2. C++标准库 第七章 STL迭代器

    迭代器 能力:行进和存取的能力 Input迭代器 一次一个向前读取元素,按此顺序一个一个返回元素 例子:从标准输入装置(键盘) 读取数据,同一个数据不会被读取两次,流水一样,指向的是逻辑位置 使用前置 ...

  3. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  4. C++:迭代器(STL迭代器)iterator详解

    STL迭代器 参考链接:http://c.biancheng.net/view/338.html

  5. stl clocklist 查找元素_剑指信奥 C++ 之 STL 迭代器(上)

    趣乐博思剑指信奥 C++ 系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试 ...

  6. java 实现斐波切纳数列,求解这个算斐波切纳兔子有关问题的算法错哪了(和stl迭代器貌似有点关系)...

    求解这个算斐波切纳兔子问题的算法哪里错了(和stl迭代器貌似有点关系) #include #include #include #define BORN_AGE 3 #define DIE_AGE 12 ...

  7. 有指针为何还要STL迭代器

    指针和STL迭代器 1.迭代器 2.迭代器和指针的区别 3.迭代器产生原因 1.迭代器 Iterator(迭代器)模式又称 Cursor(游标)模式,用于提供一种方法顺序访问一个聚合 对象中各个元素, ...

  8. STL迭代器(iterator)用法详解

    C++ STL迭代器(iterator)用法详解 无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用"迭代器(iterator)"来实 ...

  9. STL — 迭代器设计思维(一)

    迭代器设计思维 关于迭代器的基础原理和作用我以前有一个博客提到过:STL迭代器的原理以及迭代器失效 我不推荐不够了解迭代器的读者直接来看这个 博客,因为你会觉得我在做一些无意义的事情,并且理解上面也会 ...

最新文章

  1. Pipenv – 超好用的 Python 包管理工具
  2. mysql 的条件 if else_使用If else条件在mysql中选择列?
  3. 简单线性分类学习机(平分最近点法)matlab实现
  4. 我的2017:从工作再到学生
  5. java脚本计算器按钮无反应_2020年3月份最新计算机语言排行,20种语言争锋相对Java依旧飘逸...
  6. SqliteDev如何突破限制
  7. VBA引用管理加载宏
  8. POJO类与javaBean类的区别
  9. 中国矿业大学计算机学院推免,j机电学院2008届毕业生推免工作顺利完成
  10. 简单实用的查询ip地址、mac地址,修改ip地址的方法,ping命令检测网络是否通畅
  11. 微信公众号图片上传_base64图片上传处理
  12. matlab:已知传递函数,求单位阶跃响应
  13. 基于HBuilderX创建移动app项目并利用mui实现简单页面跳转
  14. 学习正则表达式 - 用 HTML 标记文本
  15. MySQL数据库乱码(中文变问号)问题解决
  16. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络
  17. 《工程伦理与学术道德》之《工程中的价值、利益与公正》
  18. 【GitHub】GitHub上值得收藏的100个精选前端项目!
  19. Android中的EditText属性说明
  20. 单片机应用编程技巧---MCU专家答网友问

热门文章

  1. HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画
  2. 自动化运维工具Ansible实战(一)简介和部署
  3. hdfs里的文件下载HDFS之fsimage、metadata、edits、fstime(二十七)
  4. 周爱民:真正的架构师是没有title的(图灵访谈)
  5. Linux -- ×××服务简绍、配置及应用(2)
  6. 【Gson】2.2.4 StackOverflowError 异常
  7. VIP客户服务系统设计(四)——按用户角色构思系统功能(上)
  8. 10、32位 x86处理器编程架构
  9. 【实用工具】之在VS中使用自定义工具配置nasm/yasm
  10. SpringBoot-拦截器