看这一节,是为了下一节的使用,在ogre3d里有些操作要使用到deque。

C++ Deque(双向队列) 的使用

  Deque结合了vector  和list  优缺点,是一种使用简单的容器。

  deque 的特点:
  (1) 随机访问方便,即支持[ ] 操作符和vector.at() ,但性能没有vector 好;
  (2) 可以在内部进行插入和删除操作,但性能不及list ;
  (3) 可以在两端进行push 、pop ;
  (4) 相对于verctor 占用更多的内存。

  常用的函数和list的基本相同,除了个别的几个,如

  1、 创建一个新双向队列 ,构造函数很多

 deque();//创建一个空双向队列
deque( size_type size );// 创建一个大小为size的双向队列
deque( size_type num, const TYPE &val ); //放置num个val的拷贝到队列中
deque( const deque &from );// 从from创建一个内容一样的双向队列
deque( input_iterator start, input_iterator end ); // start 和 end - 创建一个队列,保存从start到end的元素。

  2、Operators 比较和赋值双向队列 

    //可以使用[]操作符访问双向队列中单个的元素,代码如下

     deque <int> dequeTest;
deque <int>::iterator it;
deque <int> dequeTest2;
for (int i=;i<;i++)
{
dequeTest.push_back(i);
dequeTest2.push_back(+i);
} cout<<dequeTest[]<<endl;//使用[]直接操作元素获取最后一个元素
cout<<dequeTest.back()<<endl;//获取最后一个元素

  3、链表操作

  max_size() 返回双向队列能容纳的最大元素个数
  pop_back() 删除尾部的元素
  pop_front() 删除头部的元素
  push_back() 在尾部加入一个元素
  push_front() 在头部加入一个元素

  具体代码在最后面,很简单,我这里就不多解释了。

 看完标准容器,我们总结一下三者的优缺点

  vector 是一段连续的内存块,而deque 是多个连续的内存块, list 是所有数据元素分开保存,可以是任何两个元素没有连续。 vector 的查询性能最好,并且在末端增加数据也很好,除非它重新申请内存段;适合高效地随机存储。

   list 是一个链表,任何一个元素都可以是不连续的,但它都有两个指向上一元素和下一元素的指针。所以它对插入、删除元素性能是最好的,而查询性能非常差;适合大量地插入和删除操作而不关心随机存取的需求。

   deque 是介于两者之间,它兼顾了数组和链表的优点,它是分块的链表和多个数组的联合。所以它有被list好的查询性能,有被vector好的插入、删除性能。 如果你需要随即存取又关心两端数据的插入和删除,那么deque是最佳之选。

deque代码:

 #include "deque"
#include "iostream"
using namespace std;
int main()
{
deque <int> dequeTest;
deque <int>::iterator it;
deque <int> dequeTest2;
for (int i=;i<;i++)
{
dequeTest.push_back(i);
dequeTest2.push_back(+i);
} cout<<dequeTest[]<<endl;//获取最后一个元素
cout<<dequeTest.back()<<endl;//获取最后一个元素 it = dequeTest.end();
cout<<dequeTest.size()<<endl;//元素个数
cout<<dequeTest.back()<<endl;//获取最后一个元素
cout<<dequeTest.front()<<endl;//获取最后一个元素
cout<<dequeTest.max_size()<<endl;//最大容量 for (int i=;i<dequeTest.size();i++)
{
cout<<dequeTest.at(i)<<"\t";
}
cout<<"*****************"<<endl;
swap(dequeTest,dequeTest2);//交换两个队列元素
for (int i=;i<dequeTest.size();i++)
{
cout<<dequeTest.at(i)<<"\t";
} dequeTest.clear();//清空
if (dequeTest.empty())
{
cout<<"dequeTest is empty"<<endl;
}
getchar();
getchar();
return ;
}

STL学习笔记3--deque的更多相关文章

  1. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  2. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  3. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  4. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  5. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  6. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  7. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  8. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  9. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  10. Effective STL 学习笔记:19 ~ 20

    Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

随机推荐

  1. Android 使用greenDAO 3.2.2 操作外部数据库

    项目开发中有时需要用到一些写死的数据,如公司的产品信息之类的.这就需要我们先把数据库文件保存在资源文件夹下,然后当应用创建时将数据库文件拷到应用安装目录的/databases/文件夹下,然后再对数据进 ...

  2. 《Python高效开发实战》实战演练——建立应用2

    为了在项目中开发符合MVC架构的实际应用程序,需要在项目中建立Django应用.每个Django项目可以包含多个Django应用.建立应用的语法为: #python manage.pystartapp ...

  3. tf warning等级

    from:http://blog.csdn.net/tsinghuahui/article/details/72938764 tf讨厌的warning 2017-08-03 10:02:52.0990 ...

  4. (转) HTTP Request header

    HTTP Request header 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基 ...

  5. windows剪切板暂存

    其实最初是因为在项目中使用了html网页编辑器,通过ie的com组件和javascript通讯完成一些事情,其中有一个功能是插入表格,我们原本使用的range.pasteHTML(HTMLstr);根 ...

  6. Redis安装配置及在Python上的应用

    最近在使用Kazoo(开源电话系统) API时,一次请求的处理需要调用几次API,只为了得到一个name和id的对应关系,耗时非常大,开始想使用一种简单的实现,直接将对应关系保存到静态类的静态变量中, ...

  7. Selenium关闭windows系统弹窗

    Selenium关闭windows系统弹窗 背景:在使用某业务时,会弹出windows框 提示要打印某个文本,效果如下,而正常脚本执行完了后,关闭了driver,windows的弹框还是不会消失,这时 ...

  8. 动态规划专题(一)——状压DP

    前言 最近,决定好好恶补一下我最不擅长的\(DP\). 动态规划的种类还是很多的,我就从 状压\(DP\) 开始讲起吧. 简介 状压\(DP\)应该是一个比较玄学的东西. 由于它的时间复杂度是指数级的 ...

  9. 使用VSCode搭建TypeScript开发环境 (重点)

    下载TypeScript 在CMD(Windows系统)或者终端(macOS系统)中输入一下命令: npm install -g typescript 下载VSCode VSCode是我使用过最棒的编 ...

  10. 题解 P1319 【压缩技术】

    这题是红题,我都觉得我的题解过不了 这道题输入不像别的题,给一个参数 n ,然后输入 n 的倍数个数据,它是给一个 n , 再输入一堆数.看题目,n × n ? 是不是就说明了给出的数和一定,都是 n ...