STL中List的实现分析
来源:互联网 发布:武藏点胶机200s编程 编辑:程序博客网 时间:2024/05/16 13:03
之前自己动手写了一个单向链表的简易实现,就好奇STL中list是如何实现的,在库文件/usr/include/c++/4.7.2/bits/stl_list.h中看到了list的具体实现,标准库中list是双向链表,标准库首先定义了list中一般节点基类的结构:
struct _List_node_base
{
_List_node_base* _M_next;
_List_node_base* _M_prev;
}
然后真正的节点结构如下:
struct _List_node : public _List_node_base
{
_Tp _M_data;
}
此处定义的_List_node与之前ListNode包含的结构是一样的,但是此处把ListNode拆开,用基类定义指针,用包含数据的派生类继承自基类来表示完整的ListNode.由于_List_node是List的内部组成部分,所有_List-node 对于List是完全可见的,因此此处_List_node是用struct定义的,其内部默认是public权限。List的结构也ListNode一样,如下所示:
class _List_base
{
protected:
struct _List_impl : public _Node_alloc_type
{
......
};
_List_impl _M_impl;
_List_node* _M_get_node()
{
return _M_impl._Node_alloc_type::allocate(1);
}
void _M_put_node(_List_node<_Tp>* __p)
{
_M_impl._Node_alloc_type::deallocate(__p, 1);
}
public:
......
};
class list : protected _List_base
{
......
};
_List_base结构是为了管理内存而安排的,List的实际操作全是在_List中完成。这里看一下_List_base中的内部类_List_impl,原代码中_List_impL里只有构造函数,当然_List-impl会从基类中继承基类的方法,_list_base中有个_list_impl类型的数据成员_M_impl,下面还包括两个函数,这两个函数都有一个共同点,即函数体中都通过_M_impl调用自己的方法来完成_list_base中成员函数的功能,这就涉及到一种程序设计模式-桥接模式。桥接模式的作用是将抽象部分和它的实现部分分离,使他们都可以独立的变化。运用设计模式,可以使软件更具有扩展性。
- STL中List的实现分析
- stl中list的sort算法实现
- STL 中list的sort函数实现
- stl中list的sort算法实现
- STL中list的简单实现
- [STL]List的实现
- STL List 的实现
- STL源码分析----神奇的 list 的 sort 算法实现
- STL源码分析----神奇的 list 的 sort 算法实现
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
- sgi stl中list的sort函数实现
- sgi stl中list的sort函数实现
- STL容器中list与迭代器iterator的模拟实现
- STL中list的使用及模拟实现
- (C++ STL)list的实现
- STL 简单 list 的实现
- C++的STL中list
- STL中list的使用
- some command(to be added)
- Codeforces 392A Blocked Points(暴力)
- 网页素材 js和 jquery
- 2107 图的深度遍历
- Android 中 有关Button的几个小点
- STL中List的实现分析
- android正则匹配账号密码信息
- oracle 如何导出数据字典
- 如何在其他类中关闭另一个类中定义的JFrame
- Word Ladder
- ssi框架整合常见问题集合
- 项目系列08-软件概要设计
- hdu 2544 最短路
- scanf解析