C++ STL的中心思想在于,將算法(algorithm)和容器(container)分開(kāi),彼此獨(dú)立設(shè)計(jì),最后再用一種粘合劑將它們撮合在一起,容器和算法支持泛型化。這個(gè)粘合劑就是迭代器,每個(gè)容器都實(shí)現(xiàn)了自身的迭代器,迭代器需要對(duì)容器有豐富的認(rèn)識(shí),每個(gè)類在其內(nèi)部定義子類實(shí)現(xiàn)迭代器。 在迭代器使用的過(guò)程中,很可能需要定義容器類型的臨時(shí)變量,stl提供了模板類完成此功能,實(shí)現(xiàn)的迭代器繼承此類:
迭代器基類
template <class Category,
class T,
class Distance = ptrdiff,
class Pointer = T*,
class Reference = T&>
struct iterator
{
typedef Category iterator_category;
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
};
迭代器萃取類
template <class Iterator>
struct Iterator_traits
{
typedef typename Iterator::iterator_category iterator_category;
typedef typename Iterator::value_type value_type;
typedef typename Iterator::differece_type differece_type;
typedef typename Iterator::pointer pointer;
typedef typename Iterator::reference reference;
};
//模板特類化
template <class T>
struct Iterator_traits<T>
{
typedef random_access_iterator_tag iterator_category;
typedef T value_type;
typedef ptrdiff_t differece_type;
typedef T pointer;
typedef T& reference;
};
template <class T>
struct Iterator_traits<const T>
{
typedef random_access_iterator_tag iterator_category;
typedef T value_type;
typedef ptrdiff_t differece_type;
typedef T pointer;
typedef T& reference;
};