zoukankan      html  css  js  c++  java
  • STL容器分析--deque

    deque,故名思义,双向队列。可以在头尾进行插入删除。

    而STL中采用了链表+线性表的数据结构来实现deque,因而除了满足双向队列的特点以外,还支持随机访问。

    下面,贴一段代码。

    总览:双向队列是由链式线性表+顺序线性表组成。支持随机访问

    首先看下定义:  

    template >      

    class deque : protected _Deque_base<_Tp, _Alloc>

    可知,需先分析_Deque_base  

    template        

    class _Deque_base {            

    ...            

    _Deque_impl _M_impl;        

    };

    其中,_Deque_impl类型的_M_impl是维持deque有序的关键数据结构,      

    struct _Deque_impl       : public _Tp_alloc_type      

    {     _Tp** _M_map;    

      size_t _M_map_size;    

      iterator _M_start;    

      iterator _M_finish;

        _Deque_impl()     : _Tp_alloc_type(), _M_map(0), _M_map_size(0),       _M_start(), _M_finish()     { }

        _Deque_impl(const _Tp_alloc_type& __a)     : _Tp_alloc_type(__a), _M_map(0), _M_map_size(0),       _M_start(), _M_finish()     { }       };

    可知,在_M_impl中,保存了一个_Tp*的数组_M_map,每个数组的大小为_M_map_size. 并保存了实际数据起始和终止的迭代器。

    假如说_M_map_size = 0x10

    0x70002000:                         0x70002010             

           __________________

    _M_map      |__________________|

    0x70003000:                     0x70003010              __________________             |__________________|  _M_start可以指向任何位置              __________________             |__________________|              __________________             |__________________|              __________________             |__________________| _M_end也可以指向任何位置,只是需要在_M_map中存放于_M_start之后              __________________             |__________________|

    至此,可以通过链表找到顺序线性表,接下来就是定位顺序线性表中元素的位置

  • 相关阅读:
    647. 回文子串
    109. 有序链表转换二叉搜索树
    第1篇 第1章 走进推荐系统
    推荐系统为什么要分测试集与训练集
    面向对象案例 烤地瓜 搬家具python实现
    python面向对象方法
    python实现学生信息系统
    随机数据的生成
    Python中numpy的应用
    pandas 的index用途
  • 原文地址:https://www.cnblogs.com/onlyforcloud/p/3331725.html
Copyright © 2011-2022 走看看