读书人

STL源码辨析p130list_iteratorlt;T,Tamp;T*

发布时间: 2012-10-17 10:25:47 作者: rapoo

STL源码剖析p130list_iterator<T,T&,T*> iterator
请教一个问题,一直不明白,就是STL源码剖析p130有list_iterator的源码,其中
template <class T, class Ref, class Ptr>
struct list_iterator {
typedef list_iterator<T, T&, T*> iterator;
...
}

问题是这里模板里面三个参数是什么东西,我知道是原型指针和引用,但这样子写的作业是什么?
比如list源码里面
iterator begin() { return (link_type)((*node).next); }
我不明白 typedef list_iterator<T, T&, T*> iterator;到底是什么东西,请教~~

[解决办法]
template <class T, class Ref, class Ptr>
struct list_iterator {
typedef list_iterator<T, T&, T*> iterator;
typedef __list_iterator<T, const T&, const T*> const_iterator;
typedef __list_iterator<T, Ref, Ptr> self;
self& operator++()
{
node = (link_type)((*node).next);
return *this;
}
...
}
其实类型定义iterator、const_iterator在list_iterator定义中虽然被定义,但是未被使用,大量使用的是self。
[解决办法]
template <class T, class Alloc = alloc >
class list {
public:
typedef __list_iterator<T, T&, T*> iterator;
typedef __list_iterator<T, const T&, const T*> const_iterator;
}
list_iterator主要用于list定义之中,typedef __list_iterator<T, T&, T*> iterator;此处的类型定义iterator起到很关键的作用。而list_iterator类定义中的类型定义iterator未起到什么作用。

读书人网 >C++

热点推荐