C++ list 源码学习
Posted mysky007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ list 源码学习相关的知识,希望对你有一定的参考价值。
一. list 实例
#include<list> //调用系统的list,双向循环链表结构 using namespace std; int main(void) list<int> mylist; for(int i = 1; i <= 10; i++) mylist.push_back(i); //接口,末尾增加 list<int>::iterator it = mylist.begin(); //迭代器, while(it != mylist.end()) cout<<*it<<"-->"; //打印内部数字
++it;
二. 源码学习
struct _Node;
typedef struct _Node* _Nodeptr; //指向节点的指针类型
struct _Node //_Node这个是节点类型
_Nodeptr _Prev; //前驱节点
_Nodeptr _Next; //后继节点
_Ty _Value; //模板数据类型
;
struct _Acc //定义_Acc这个类型
typedef struct _Node*& _Nodepref; //指向节点类型指针的引用
typedef _Ty& _Vref; //这个数据类型的引用
static _Nodepref _Next(_Nodeptr _P) //静态方法, 返回值是节点指针的引用 ,参数是指向节点的指针
return ((_Nodepref)(*_P)._Next); //:*_P得到这个节点,()强制类型转换的优先级没有.高,所以此时先取_Next,在进行强制类型转换的工作,返回一个指向节点指针的引用。
static _Nodepref _Prev(_Nodeptr _P)
return ((_Nodepref)(*_P)._Prev);
static _Vref _Value(_Nodeptr _P)
return ((_Vref)(*_P)._Value);
;
public: //以下的类型是_A这个类下面的类型,_A这个类在空间置配器中定义
typedef typename _A::value_type value_type;
typedef typename _A::pointer_type pointer_type;
typedef typename _A::const_pointer_type const_pointer_type;
typedef typename _A::reference_type reference_type;
typedef typename _A::const_reference_type const_reference_type;
typedef typename _A::size_type size_type; //这个类型其实就是size_tprivate:
_Nodeptr _Head; //指向头结点的指针
三. 构造函数和析构函数
public:
explicit list():_Head(_Buynode()),_Size(0) //explicit显示调用此构造函数,给头一个指向,刚开始0个
~list()
//释放空间和空间配置器有关,在现阶段先不关心。
erase(begin(), end()); //调用开始,结束函数释放空间;
_Freenode(_Head); //释放头;
_Head = 0, _Size = 0; //都赋空;
以上是关于C++ list 源码学习的主要内容,如果未能解决你的问题,请参考以下文章