0 前言

C++ STL提供了vector、list等模板容器,极大地方便了编程使用。

“遍历”是对容器使用的最常用的操作。

使用迭代器来遍历是最好最高效的遍历方法。

当然,对于有些容器的遍历除了使用迭代器,还可以使用传统的索引来遍历。

在实际编程中,需要迭代器和索引同时使用,混合编程,就难免会涉及到迭代器和索引之间的相互转换。

转换主要是使用STL中的advancedistance函数来进行的,

advance是将iterator移动指定个元素,distance是计算两个iterator直接的距离。

1 distance与advance

distance计算第一个参数到第二个参数之间的距离。如果第二个参数的顺序在第一个参数前面的话,函数是会返回负值的;如果迭代器不在一个容器内,程序会抛出异常。

Determines the number of increments between the positions addressed by two iterators.

template<class InputIterator>

   typename iterator_traits<InputIterator>::difference_type

      distance(

         InputIterator _First,

         InputIterator _Last

);

advance是将第一个参数向后移动第二个参数指定个元素。如果第二个参数为负,则向前移动;如果向前或向后移动超出容器范围,则抛出异常。

Increments an iterator by a specified number of positions.

template<class InputIterator, class Distance>

   void advance(

      InputIterator& _InIt,

      Distance _Off

   );

2 distance与advance使用

#include <iostream>

#include <list>

#include

using namespace std;

int main()

{

  list mylist;

  for (int i = 0; i < 10; i++)

  {

  mylist.push_back (i * 10.0);

  }

  list::iterator itfirst  = mylist.begin();

  list::iterator itlast = mylist.end();

  advance(itfirst, 1);

  cout << "The distance is: " << distance(itfirst, itlast) << endl;

  return 0;

}

附录:写了两个工具函数

inline const int iterator_to_index(MYARRAY &a, MYARRAY::iterator it)

{

  return (int)distance(it - a.begin());

}

inline const MYARRAY::iterator index_to_iterator (MYARRAY &a, int nIndex)

{

  MYARRAY::iterator it = a.begin();

  Advance(it, nIndex);

  return it;

}

最新文章

  1. UITableViewController和XML解析还有地图的简单结合
  2. Mac iTerm 很好用的终端
  3. ViewState提交后丢失,竟然是OnInit搞的鬼
  4. XidianOJ 1195 Industry of Orz Pandas
  5. 【Oracle】配置oracle数据库最大连接数
  6. poj 1035 Spell checker
  7. mysql update中需要根据条件列更新写法update case
  8. ThinkPHP3.2 行为扩展以及插件机制介绍!
  9. DNSPod各个套餐的DNS地址
  10. C++中实现回调机制的几种方式(一共三种方法,另加三种)
  11. Linux lsof命令详解和使用示例【转】
  12. jdk,tomcat配置
  13. C语言的字符串操作函数小结
  14. Scala安装教程
  15. P3374 【模板】树状数组 1--洛谷luogu
  16. jsp传Array数组到后台
  17. AtomicInteger和count++的比较
  18. [No0000189]改善C#程序的建议10:用Parallel简化Task
  19. 侯捷STL课程及源码剖析学习1
  20. Python练习笔记——计算输入日期为改年的第几天、星期几

热门文章

  1. DBCP( 二) DataBase Connection Pool 的使用
  2. 用python实现的的手写数字识别器
  3. 简述document.write和 innerHTML的区别。
  4. ASP.NET Web API 控制器执行过程
  5. Python 列表 min() 方法
  6. NPN/PNP和N沟道/P沟道负载的接法
  7. Sublime Text 使用指南 - 前端开发神器
  8. Docker搭建本地私有仓库
  9. Leetcode[81]-Search for a Range
  10. Machine Learning—The k-means clustering algorithm