【转】C++ 标准库值操作迭代器的常见函数
迭代器是C++标准库中的重要组件,特别是在容器内部,没有迭代器,容器也就无所谓存在了。
例如:vector容器简而言之就是3个迭代器 start finish 以及end_of_storage vector的任何操作都离不开这3个迭代器。。
接下来,总结一下C++ 中的迭代器的操作。
C++的迭代器分为5类,依次为 : Input_iterator, output_iterator, forwrd_iterator, bidirectional_iterator 以及 random_access_iterator
访问的级别由低到高,
下面的相应的模板函数的参数是以 “可进行该操作的最小迭代器类型”为基础的。
函数 advance:
template <class InputIterator, class Distance>
void advance (InputIterator& it, Distance n);
迭代器前进 n 个距离。如果是随机迭代器,直接 +n ,否则使用 ++ 操作移动。
使用方法:
list<int>::iterator it = myList.begin();
advance (it, 5);
函数distance:
template<class InputIterator>
typename iterator_traits<InputIterator>::difference_type
distance (InputIterator first, InputIterator last);
求的是迭代器first与last间 的元素的个数,如果是随机迭代器,直接使用 operator- 就好了,否则就要连续调用operator++操作符。
用法:
vector<int. A = {1,2,3,4}; // c++11
vector<int> ::iterator it = lower_bound(A.begin(), A.end(), 4);
distance(A.begin(), it);
begin 和 end: 等价于容器中的begin与end。
比如下述遍历vector的方式:
vector<int> A = {1,2,4,5,6};
for(auto it = A.begin(), it != A.end(); ++it)
cout << *it << " " ;
cout << endl;
等价于:
for(auto it = begin(A), it != end(A); ++it)
cout << *it << " " ;
cout << endl;
prev函数:返回迭代器的前n个位置的迭代器:
template <class BidirectionalIterator>
BidirectionalIterator prev (BidirectionalIterator it,
typename iterator_traits<BidirectionalIterator>::difference_type n = 1);
例如要返回上述vector的最后一个元素:
cout << prev(A.end() ) << endl;
要返回上述vector的倒数第3个元素:
cout << prev(A.end() , 3) << endl;
next函数:返回迭代器的后n个位置的迭代器:
template <class ForwardIterator>
ForwardIterator next (ForwardIterator it,
typename iterator_traits<ForwardIterator>::difference_type n = 1);
例如要返回上述vector的第二个元素
cout << next(A.begin()) << endl;
第k个元素:
cout << next(A.begin(), k-1) << endl;
上述函数中,后四个函数是C++11新添加的函数。
【转】C++ 标准库值操作迭代器的常见函数的更多相关文章
- STM32标准库GPIO操作
STM32标准库GPIO操作 STM32任何外围设备的使用都分为两部分:初始化和使用.体现在代码上就是:(1)有一个初始化函数(2)main函数中的使用 1.初始化GPIO 初始化GPIO函数代码: ...
- 把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 ...
- C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...
- C++ Primer 有感(标准库vector及迭代器)
vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...
- C++标准库vector以及迭代器
今天看C++的书,出现了一个新的概念,容器vector以及容器迭代器. vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存. ...
- C++标准库vector及迭代器
vector是同一种对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的类存.引入头文件 #include<vector> 1.vecto ...
- python2.7.13标准库文件目录操作与文件操作
标准库的中文参考文档: http://python.usyiyi.cn/translate/python_278/library/index.html 官方标准库文档:https://docs.pyt ...
- Python3标准库:itertools迭代器函数
1. itertools迭代器函数 itertools包括一组用于处理序列数据集的函数.这个模块提供的函数是受函数式编程语言(如Clojure.Haskell.APL和SML)中类似特性的启发.其目的 ...
- golang中的标准库IO操作
参考链接 输入输出的底层原理 终端其实是一个文件,相关实例如下: os.Stdin:标准输入的文件实例,类型为*File os.Stdout:标准输出的文件实例,类型为*File os.Stderr: ...
随机推荐
- POJ1048 Follow My Logic
题目来源:http://poj.org/problem?id=1048 题目大意: 给定一个逻辑电路,求其逻辑输出.电路含一个或多个输入,以及一些双输入的与门/或门组成.电路图以下面形式的ASCII码 ...
- nginx配置openssl证书
引用出处: https://blog.csdn.net/liuchunming033/article/details/48470575 证书生成基本步骤: 生成私钥(.key)-->生成证书请求 ...
- excel单元格内容拆分
这几天在整理数据,但是数据都在表格的一个单元格中,看起来很不方法,所以在网上找到excel单元格内如拆分的方法,并亲测有效 介绍2种拆分的方法 方法一: (1)在B1输入公式=right(text,[ ...
- leetcode 91. 解码方法
题目描述: 一条包含字母 A-Z 的消息通过以下方式进行了编码: 'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数 ...
- Eclipse中mybatis的xml文件没有提示,出现the file cannot be validated as the XML definition.....
1.下载dtd文件 2.在eclipse中配置本地dtd文件: Window->Preferences->XML->XML Catalog->User Specified En ...
- Java集合——集合框架Set接口
1.Set接口 一个不包含重复元素的collecyion.更确切的讲,set不包含满足e1.equals(e2)的元素e1和e2,并且最多包含一个null元素. 2.HashSet 类实现Set接口, ...
- MapReduce实战:邮箱统计及多输出格式实现
紧接着上一篇博文我们学习了MapReduce得到输出格式之后,在这篇博文里,我们将通过一个实战小项目来熟悉一下MultipleOutputs(多输出)格式的用法. 项目需求: 假如这里有一份邮箱数据文 ...
- 利用PyQt GUI显示图片、实时播放视频
---作者吴疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:PyQt界面程序 ...
- SharePoint 2010开发方面的课堂中整理有关问题
SharePoint 2010开发方面的课堂中整理有关问题 这是我这几天在做一个SharePoint开发的课程的时候,大家提出的一些问题,及我的解答,分享给更多的朋友参考一下 这个文档,也可以在这里下 ...
- 零基础逆向工程27_Win32_01_宽字符_MessageBox_win32调试输出
1 多字节字符 ASCII码表:0 ~ 2^7-1 扩展ASCII码表:2^7 ~ 2^8-1 什么是GB2312:1980年,两个字节存储一个汉字:不通用,别国会有乱码. UCICODE:只有一个字 ...