看这一节,是为了下一节的使用,在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. windows 右键崩溃 解决方法

    [问题描述] 选中一个文件,右键之后无法弹出菜单,最后显示: 资源管理器未响应. [参考方法] https://www.jianshu.com/p/d627c941467a [方法介绍] 1.下载Sh ...

  2. JavaScript基础:(加号,数值转换,布尔转换)

    JavaScript中加号运算符"+" 运算过程理解 1) 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始值.日期对象通过toString()方法执行转换, ...

  3. linux 命令——38 cal (转)

    cal命令可以用来显示公历(阳历)日历.公历是现在国际通用的历法,又称格列历,通称阳历.“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”. 1.命令格式: cal  ...

  4. IBM WebSphere MQ安装及配置详解

    打开MQ安装程序,选择下一步,默认安装WebSphere MQ, 完成MQ的安装工作,启动WebSphere MQ, 服务器配置,选择新建队列管理器,创建名为 "mq"的队列管理器 ...

  5. TFS看板的迭代规划

    故事点 故事点更多体现的是用户情景或者bug的规模,采用斐波拉契数列(1,2,3,5,8,13)这样的数字表示,包含如下内容: 相对工作量 复杂度 风险和不确定性 相对工作量 下面演示一个Case来说 ...

  6. hdu-1162 Eddy's picture---浮点数的MST

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1162 题目大意: 给n个点,求MST权值 解题思路: 直接prim算法 #include<bi ...

  7. 2018.6.12 Oracle问题

    ORA-01950: 对表空间 'USERS' 无权限 创建新的用户时,要指定default tablespace,否则它会把system表空间当成自己的缺省表空间.这样做是不提倡的.估计原来创建某个 ...

  8. C#逻辑运算符

    一.C#逻辑运算符 C#语言的逻辑运算符是对变量的值.表达式的运算结果进行比较,基比较结果为True或False. 二.示例 using System;using System.Collections ...

  9. java算法面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 ;读取docx 读取doc 使用poi 相关jar包提集提供下载

    从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序 1,张三,28 2,李四,35 3,张三,28 4,王五,35 5,张三,28 6,李四,35 7,赵六,28 ...

  10. Java传值分析

    public class Example{String str=new String("good");char[] ch={'a','b','c'};public static v ...