在线等stl源码第四章list的疑问
- C/C++ code
第四章 list成员函数:iterator begin() // 问题是:iterator的类型和link_type 不一样{return ( link_type) ( (*node).next); }其中:link_type 类型为typedef _list_node<T>* link_node;typedef list_node* link_type;而iterator 是一个_list_iterator这是怎么回事???[解决办法]
_list_iterator 类只有一个数据成员, 就是 link_type。而且它提供了一个构造函数, __list_iterator(link_type x), 这个构造函数就提供了一个 link_type 向 __list_iterator 自动转型的功能。
[解决办法]
list<T>::iterator iter = lst.begin();
iter->func(); // (&iter.operator*())->func();
[解决办法]
3. 这是一个循环双链表,尾节点的下一个节点就是头节点,头节点的上一个节点就是尾节点。
node 是刻意保留的一个空白节点,它不保存内容,只作为尾节点来使用,即 end(),它的下一个节点是头节点,所以有 begin() 函数的写法。
4.
- C/C++ code
class A{ public: void print() const { printf("A"); }}list<A> l;l.push_back(A());list<A>::const_iterator iter;iter =l.begin();int* p= iter->print(); //这样调用