看这一节,是为了下一节的使用,在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. nginx学习书籍推荐

    最好的书是源码 深入理解NGINX" 陶辉著 <实战Nginx...>张宴 <深入理解Nginx:模块开发与架构解析> nginx开发从入门到精通 Nginx HTT ...

  2. v-if与v-show的区别

    一.区别 v-if 动态的向DOM树内添加或者删除DOM元素:“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建:在初始渲染条件为假时,什么也不做. v-sho ...

  3. hihoCoder hiho一下 第二周 #1014 : Trie树(Trie树基本应用)

    思路: 完全看题目中的介绍就行了.还有里面的input写道:不保证是英文单词,也有可能是火星文单词哦.比赛结束后的提交是不用考虑26个字母之外的,都会AC,如果考虑128种可能的话,爆了内存.步骤就是 ...

  4. SQLServer事务的原理

    1.事务的概念 是数据库管理系统执行过程中的一个逻辑单元,由一个有限的数据库操作序列组成: 由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操 ...

  5. 使用Scanner类获取键盘输入的会员卡号,并将该数据存储在变量中,输出这个变量的信息

    package come.one01;import java.util.Scanner; // 导入Scanner类public class One03 { public static void ma ...

  6. java 字符串中是否有数字

    http://www.cnblogs.com/zhangj95/p/4198822.html http://www.cnblogs.com/sunzn/archive/2013/07/12/31865 ...

  7. AngularJS 对象

    AngularJS对象就像JavaScript对象 <!DOCTYPE html><html><head><meta http-equiv="Con ...

  8. 架构图(拓扑图)画图工具分析整理(静态,动态,可交互图.层级tu)

    最近要画架构图. 一方面有图片洁癖,另外一方面又不想不停的挪动图片. 一开始想用脑图软件. 发现脑图是树状的,架构模块依赖图是网状的.(也可以简化为层级图,不画交互关系.类似 dubbo 的架构图. ...

  9. java连接MySQL数据库操作步骤

    package com.swift; //这里导入的包是java.sql.Connection而不是com.mysql.jdbc.Connection import java.sql.Connecti ...

  10. 5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理

    5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理 这个文章包含三个部分 1:gtid的多线程复制2:同步中断处理3:GTID的备份与恢复 下面文字相关的东西 大部分 ...