迭代器是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新添加的函数。

最新文章

  1. Android笔记——Bundle类的作用
  2. HTML5的File API读取文件信息
  3. (五)Maven目录结构及常用命令说明
  4. C#窗体 流
  5. the railway problem(the example of stack)
  6. 【POJ2104】kth num
  7. KindEditor设置为过滤模式,但在代码模式下提交表单时不过虑HTML标签的解决方法
  8. 【Slickflow学习】.NET开源工作流环境搭建(三)
  9. 支付宝移动支付开发详细教程服务端采用.net mvc webapi(C#)
  10. CSS3秘笈复习:第九章&amp;第十章
  11. springmvc+jdbc连接数据库(第一个微商项目,代理注册)
  12. Linux第三节整理 、增删改查、用户管理
  13. spring MVC 管理HttpClient---实现在java中直接向Controller发送请求
  14. 分布式架构原理解析,Java开发必修课
  15. 学习笔记——xml的入门及解析
  16. centOS --- 安装最新版的node nodejs
  17. notepad++颜色修改
  18. 大数高精度计算库gmp简介
  19. 玩转 React 【第03期】:邂逅 React 组件
  20. iOS后台唤醒实战:微信收款到账语音提醒技术总结

热门文章

  1. JMeter - 如何在多个测试环境中运行多个线程组
  2. POJ1046 Color Me Less
  3. 4、python数据类型之列表(list)
  4. PHP学习 文件操作函数的应用--简单网络留言模板
  5. Angular2.0的学习(二)
  6. QT 简单的计算器例子
  7. Unity Gizmos绘制指定长宽的网格
  8. awk 分解行、字段
  9. Elasticsearch支持的字段类型
  10. 一起来学Spring Cloud | 第一章 :如何搭建一个多模块的springcloud项目