c++--STL迭代器相关辅助函数
前言
最近在看《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迭代器相关辅助函数相关推荐
- C++中的迭代器(STL迭代器)iterator
1.Cpp中的迭代器 要访问顺序容器和关联容器中的元素,需要通过迭代器(iterator)进行.迭代器是一个变量,相当于容器和操纵容器的算法之间的中介.迭代器可以指向容器中的某个元素,通过迭代器就可以 ...
- C++标准库 第七章 STL迭代器
迭代器 能力:行进和存取的能力 Input迭代器 一次一个向前读取元素,按此顺序一个一个返回元素 例子:从标准输入装置(键盘) 读取数据,同一个数据不会被读取两次,流水一样,指向的是逻辑位置 使用前置 ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- C++:迭代器(STL迭代器)iterator详解
STL迭代器 参考链接:http://c.biancheng.net/view/338.html
- stl clocklist 查找元素_剑指信奥 C++ 之 STL 迭代器(上)
趣乐博思剑指信奥 C++ 系列 ❝ 趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案.开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试 ...
- java 实现斐波切纳数列,求解这个算斐波切纳兔子有关问题的算法错哪了(和stl迭代器貌似有点关系)...
求解这个算斐波切纳兔子问题的算法哪里错了(和stl迭代器貌似有点关系) #include #include #include #define BORN_AGE 3 #define DIE_AGE 12 ...
- 有指针为何还要STL迭代器
指针和STL迭代器 1.迭代器 2.迭代器和指针的区别 3.迭代器产生原因 1.迭代器 Iterator(迭代器)模式又称 Cursor(游标)模式,用于提供一种方法顺序访问一个聚合 对象中各个元素, ...
- STL迭代器(iterator)用法详解
C++ STL迭代器(iterator)用法详解 无论是序列容器还是关联容器,最常做的操作无疑是遍历容器中存储的元素,而实现此操作,多数情况会选用"迭代器(iterator)"来实 ...
- STL — 迭代器设计思维(一)
迭代器设计思维 关于迭代器的基础原理和作用我以前有一个博客提到过:STL迭代器的原理以及迭代器失效 我不推荐不够了解迭代器的读者直接来看这个 博客,因为你会觉得我在做一些无意义的事情,并且理解上面也会 ...
最新文章
- Pipenv – 超好用的 Python 包管理工具
- mysql 的条件 if else_使用If else条件在mysql中选择列?
- 简单线性分类学习机(平分最近点法)matlab实现
- 我的2017:从工作再到学生
- java脚本计算器按钮无反应_2020年3月份最新计算机语言排行,20种语言争锋相对Java依旧飘逸...
- SqliteDev如何突破限制
- VBA引用管理加载宏
- POJO类与javaBean类的区别
- 中国矿业大学计算机学院推免,j机电学院2008届毕业生推免工作顺利完成
- 简单实用的查询ip地址、mac地址,修改ip地址的方法,ping命令检测网络是否通畅
- 微信公众号图片上传_base64图片上传处理
- matlab:已知传递函数,求单位阶跃响应
- 基于HBuilderX创建移动app项目并利用mui实现简单页面跳转
- 学习正则表达式 - 用 HTML 标记文本
- MySQL数据库乱码(中文变问号)问题解决
- 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络
- 《工程伦理与学术道德》之《工程中的价值、利益与公正》
- 【GitHub】GitHub上值得收藏的100个精选前端项目!
- Android中的EditText属性说明
- 单片机应用编程技巧---MCU专家答网友问
热门文章
- HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画
- 自动化运维工具Ansible实战(一)简介和部署
- hdfs里的文件下载HDFS之fsimage、metadata、edits、fstime(二十七)
- 周爱民:真正的架构师是没有title的(图灵访谈)
- Linux -- ×××服务简绍、配置及应用(2)
- 【Gson】2.2.4 StackOverflowError 异常
- VIP客户服务系统设计(四)——按用户角色构思系统功能(上)
- 10、32位 x86处理器编程架构
- 【实用工具】之在VS中使用自定义工具配置nasm/yasm
- SpringBoot-拦截器