C++中的deque总结

Deque双端队列容器

一、基本原理

    deque的元素数据采用分块的线性结构进行存储,如图所示。deque分成若干线性存储块,称为deque块。块的大小一般为512个字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数。

所有的deque块使用一个Map块进行管理,每个Map数据项记录各个deque块的首地址。Mapdeque的中心部件,将先于deque块,依照deque元素的个数计算出deque块数,作为Map块的数据项数,创建出Map块。以后,每创建一个deque块,都将deque块的首地址存入Map的相应数据项中。

  在Mapdeque块的结构之下,deque使用了两个迭代器M_startM_finish,对首个deque块和末deque块进行控制访问。迭代器iterator共有4个变量域,包括M_firstM_lastM_curM_nodeM_node存放当前deque块的Map数据项地址,M_firstM_last分别存放该deque块的首尾元素的地址(M_last实际存放的是deque块的末尾字节的地址),M_cur则存放当前访问的deque双端队列的元素地址。



二、应用

deque的创建
#include<deque>
deque<int> a;//创建一个没有任何元素的deque对象
deque<int> a(10)//创建一个具有10个元素的deque对象,默认值为0
deque<char> d1(5,'k')
deque<char>d2(d1)//拷贝构造函数
deque的初始化
利用push_back,可在尾部插入数据
deque的访问
可以利用数组以及迭代器进行访问:a[i]  (0<=i<a.size())或者利用迭代器for(iElementLocater=a.begin();iElementLocater!=a.end();++iElementLocater)
{
cout<<*iElementLocater;
}

4、插入

1deque 具有高效的头部插入元素的函数push_front()

void push_front(const T&)

2)将在pos位置之前,插入新元素x

iterator insert(iterator pos, const T& x)

5、删除

1void pop_front()    

删除deque的第一个元素。

2void pop_back()

删除deque的最后一个元素。         //声明一点是vector 没有pop_back();

3iterator erase(iterator pos)

删除pos所指向的元素。

4iterator erase(iterator first, iterator last)

删除迭代器区间[first,last)所指向的所有元素。

5void clear()

删除所有元素。

6、交换

void swap(deque&)

d1.swap(d2);

7、其它

1bool empty()

判断deque容器是否已有元素,是则返回true,否则返回false

2size_type size()

当前deque容器的元素个数。

3size_type max_size()

系统所支持的deque容器的最大元素个数。

4reference front()

deque容器的首元素(引用返回),要求deque不为空。

5reference back()

deque容器的末元素(引用返回),要求deque不为空。




  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值