首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于iterator的困惑,求解答。解决办法

2012-06-11 
关于iterator的困惑,求解答。现在分不清楚iterator里的iterator和vector vectorT::iterator的iterato

关于iterator的困惑,求解答。
现在分不清楚<iterator>里的iterator和<vector> vector<T>::iterator的iterator的异同。
是不是vector 里面也定义了一个iterator 结构体,对<iterator>的iterator进行了封装。

还有一个疑问是 排序函数sort
function template
sort
<algorithm>
template <class RandomAccessIterator>
  void sort ( RandomAccessIterator first, RandomAccessIterator last );

template <class RandomAccessIterator, class Compare>
  void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

Input Iterator

Output Iterator

Forward Iterator

Bidirectional Iterator

RandomAccess Iterator 这几种类型的Iterator 之间是没有继承关系的,而是一种包含关系。
当我调用
std::sort(v.begin(),v.end(),mysort); 时,是怎么把vector<T>::iterator 变成一种通用的iterator,然后进行排序的。




[解决办法]
iterator没有基类提供抽象接口,一个容器实现一份,只是一个接口规定而已。
[解决办法]
迭代器大致主要用在泛型算法里,大致用法一样 ++ += != 之类。
只不过有些地方对迭代器的种类有要求(如只读,只写.如快排需要random access),或者某些算法对特定迭代器实现有差别(如advance,reverse等)。
故采用迭代器的萃取方式,利用函数重载解决这些问题。

至于为什么不用继承+虚函数,个人觉得一是没必要用到,二来是为了考虑一种轻量级依赖问题.就好似STL的仿函数为什么用对象,而不是虚函数规范一样

热点排行