关于STL的LIST源码有关问题(VC++6.0版本的源码)

关于STL的LIST源码问题(VC++6.0版本的源码)
在LIST有如下定义
class list {
  ……
protected:
struct _Node;
friend struct _Node;
struct _Node {
_Nodeptr _Next, _Prev;
_Ty _Value;
};
struct _Acc;
friend struct _Acc;
const_iterator(_Nodeptr _P)
: _Ptr(_P) {}
  ……
关于const_iterator的解释:函数后面的(:_Ptr(_P))是成员初始化表。表示this->_Ptr = _P;
/*
List定义了类中类class const_iterator;
然后对类中类定义:class const_iterator : public _Bidit<_Ty, difference_type> {
有保护类型的成员变量 _Nodeptr _Ptr;
*/
这里,我想问list的成员函数
iterator begin()
{return (iterator(_Acc::_Next(_Head))); }
1. 这里的_Acc是不是list的类部成员变量?
2. _Acc::_Next(_Head)是什么意思?怎么解释?
3. _Node定义两遍什么意思?
4. 这个函数的意思是:返回一个指向list容器中起始元素的迭代器。请问,是怎么指向的?

------解决方案--------------------
1、_Acc是list的内部类,不是成员变量。
2、_Acc::_Next(_Head)就返回了_Head的Next,这个_Head是个list结点。
3、不知道。我猜应该是为了声明和定义分离,先声明,而具体定义可以移到其他地方,只要接口不变就行。而只不过这里恰好具体定义在声明之后。
4、list默认构造时_Acc::_Next和_Prev都指向了一个list自己alloc出来的一个list结点指针,看看_Buynode就知道了
------解决方案--------------------
struct _Acc;
friend struct _Acc;
看这两句就知道_Acc是什么东西了。
_Acc::_Next(_Head)是_Acc里面的一个函数
struct _Node;
这个是声明不是定义,所以不存在定义两遍
通过list里面的(_Head成员变量得到起始元素的迭代器
------解决方案--------------------
楼主,还是先买本c++ primer,认真重学了C++基础,再啃stl源码吧。