关于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的仿函数为什么用对象,而不是虚函数规范一样