STL—deque(双端队列)

简述

  deque和vector一样,采用线性表顺序存储结构(意味着可以随机访问),但与vector唯一不同的是,deque采用分块的线性存储结构来存储数据,每块的大小一般为512字节,称为一个deque块,所有的deque块使用一个Map块进行管理,每个Map数据项纪录各个deque块的首地址。这样一来,deque块在头部和尾部都可以插入和删除元素,而不需要移动其他元素。
   一般来说,当考虑到容器的内存分配策略和操作性能时,deque相对于vector更有优势。

头文件

#include<deque>

对象创建

 deque<int> dq;          //创建没有任何元素的deque对像 
 deque<int> dq(10);      //创建具有10整型元素的deque对象,每个元素都为0
 deque<int> dq(10,8);    //创建具有10双整型元素的deque对象,每个元素都为8

元素插入

 dq.push_back(10);            //从尾部插入元素,会不断扩张队列
 dq.push_front(11);           //从头部插入元素,不会增加新元素,只讲原有元素覆盖
 dq.insert(dq.begin()+5,6);   //从任意位置插入元素,不会增加新元素,只讲原有元素覆盖
 dq[7]=999;                   //对元素重新赋值

注:只有 push_back() 才是真正的插入、添加,会改变队列长度,其他的都只是对旧元素更改、覆盖。

元素删除

 dq.pop_front();                     //从头部删除元素
 dq.pop_back();                      //从尾部删除元素
 dq.erase(dq.begin()+2);             //从任意位置删除元素 ,形参为迭代器
 dq.clear();                         //清空元素

元素遍历

 deque<int>::iterator it;            //迭代器遍历
 for(it=dq.begin();it!=dq.end();it++)
     cout<<*it<<" ";
    
 deque<int>::reverse_iterator rit;   //迭代器反向遍历
 for(rit=dq.rbegin();rit!=dq.rend();rit++)
     cout<<*rit<<" ";
    
 int i;                              //下标遍历       
 for(i=0;i<dq.size();i++)
     cout<<dq[i]<<" ";

总结

  由于deque与vector的操作基本上是一样的,所以没有详细讲述,如果有不懂得可以参考STL—vector详解。

你可能感兴趣的:(STL)