标签:i++ 析构 源码 xpl ack 类型 析构函数 释放 数据
一. 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; //都赋空;
}
标签:i++ 析构 源码 xpl ack 类型 析构函数 释放 数据
原文地址:https://www.cnblogs.com/mysky007/p/11247860.html