写了十几年代码了,今天才知道*为什么*指针可以做为迭代器使用。
这是因为:
首先,标准库里有这样一个template,它用来得到特定迭代器的相关特性:
namespace std { template <class T> struct iterator_traits { typedef typename T::value_type value_type; typedef typename T::difference_type difference_type; typedef typename T::iterator_category iterator_category; typedef typename T::pointer pointer; typedef typename T::reference reference; }; }
而对于指针,又有这样一个模板特例化,
namespace std { template <class T> struct iterator_traits<T*> { typedef T value_type; typedef ptrdiff_t difference_type; typedef random_access_iterator_tag iterator_category; typedef T* pointer; typedef T& reference; }; }
这个模板特例化的意思是:对于每一个指向类型T的指针,都被定义为一个可随机访问的迭代器。
更详细的,参见文章:介绍iterator_trait http://www.codeproject.com/Articles/36530/An-Introduction-to-Iterator-Traits
copyright ykyi.net