【1】deque容器

deque 是对 vector 和 list 优缺点的结合,它是处于两者之间的一种容器。

【2】deque方法集

应用示例代码:

 #include <deque>
#include <iostream>
using namespace std; void print(deque<int> & myDeque)
{
int nSize = myDeque.size(); // 返回双向队列中元素的个数
for (int i = ; i < nSize; ++i)
{
cout << myDeque[i] << " ";
}
cout << endl;
} void main()
{
// 构造函数1
deque<int> myDeque1; // 创建一个空的双向队列
// 构造函数2
deque<int> myDeque2(); // 创建一个含有5个元素的双向队列
// 构造函数3
deque<int> myDeque3(, ); // 创建一个含有5个元素且值为15的双向队列
// 构造函数4
deque<int> myDeque4(myDeque3); // 创建一个与myDeque3一样的双向队列
// 构造函数5
// 创建一个双向队列,保存myDeque4队列从begin()到end()的元素
deque<int> myDeque5(myDeque4.begin(), myDeque4.end()); // 索引访问数据元素
// 打印容器中数据元素的值
int nSize = myDeque5.size();
for (int i = ; i < nSize; ++i)
{
cout << myDeque5[i] << " ";
}
cout << endl; // assign 赋值1
myDeque1.assign(myDeque5.begin(), myDeque5.end());
print(myDeque1);
// assign 赋值2
myDeque2.assign(, );
print(myDeque2); // at() 返回指定pos的元素(引用)
nSize = myDeque2.size();
for (int i = ; i < nSize; ++i)
{
cout << myDeque2.at(i) << " ";
}
cout << endl; // back() 返回最后一个元素的引用
cout << "back() :: " << myDeque2.back() << endl; // clear() 清除所有元素
myDeque2.clear(); // empty() 判空
cout << "empty() :: " << myDeque2.empty() << endl; // erase 删除元素1
myDeque1.erase(myDeque1.begin());
print(myDeque1);
// erase 删除元素2
myDeque1.erase(myDeque1.begin(), myDeque1.end());
print(myDeque1); // front() 返回第一个元素的引用
cout << "front() :: " << myDeque3.front() << endl; // get_allocator() 返回双向队列的配置器
// 1、用内存分配器分配包含5个元素的数组
int* p = myDeque1.get_allocator().allocate(); // 2、构造数组中的每个元素:
for (int i = ; i < ; ++i)
{
myDeque1.get_allocator().construct(&p[i], i);
} cout << "当前数组:";
for (int i = ; i < ; ++i)
cout << " " << p[i];
cout << endl; // 3、析构及释放内存:
for (int i = ; i < ; ++i)
{
myDeque1.get_allocator().destroy(&p[i]);
} myDeque1.get_allocator().deallocate(p, ); // insert 插入一个元素到双向队列中
myDeque1.insert(myDeque1.begin(), , );
print(myDeque1);
myDeque3.insert(myDeque3.begin(), myDeque1.begin(), myDeque1.end());
print(myDeque3); // max_size() 返回双向队列可以容纳的最大元素个数
cout << "max_size() :: " << myDeque2.max_size() << endl; // push_front() 在头部添加一个元素
// push_back() 在尾部添加一个元素
// pop_front() 删除头部的元素
// pop_back() 删除尾部的元素
for (int i = ; i < ; ++i)
{
int nRandValue = rand() % ;
if (nRandValue % == )
{
myDeque2.push_front(nRandValue);
}
else
{
myDeque2.push_front(nRandValue);
}
}
print(myDeque2);
myDeque2.pop_back(); // 删除尾部元素
cout << "pop_back()后 ";
print(myDeque2);
myDeque2.pop_front(); // 删除头部元素
cout << "pop_front()后 ";
print(myDeque2); // swap() 和另一个双向队列交换元素
cout << "交换前:" << endl;
cout << "双向队列1数据元素:";
print(myDeque1);
cout << "双向队列2数据元素:";
print(myDeque2);
myDeque1.swap(myDeque2);
cout << "交换后:" << endl;
cout << "双向队列1数据元素:";
print(myDeque1);
cout << "双向队列2数据元素:";
print(myDeque2); // resize() 改变双向队列的大小
myDeque1.resize();
cout << "双向队列1 重置大小为resize(5) :: " ;
print(myDeque1); system("pause");
} // run out:
/*
15 15 15 15 15
15 15 15 15 15
100 100 100 100 100
100 100 100 100 100
back() :: 100
empty() :: 1
15 15 15 15 front() :: 15
当前数组: 0 1 2 3 4
66 66 66 66 66 66
66 66 66 66 66 66 15 15 15 15 15
max_size() :: 1073741823
64 62 58 78 24 69 0 34 67 41
pop_back()后 64 62 58 78 24 69 0 34 67
pop_front()后 62 58 78 24 69 0 34 67
交换前:
双向队列1数据元素:66 66 66 66 66 66
双向队列2数据元素:62 58 78 24 69 0 34 67
交换后:
双向队列1数据元素:62 58 78 24 69 0 34 67
双向队列2数据元素:66 66 66 66 66 66
双向队列1 重置大小为resize(5) :: 62 58 78 24 69
请按任意键继续. . .
*/

【3】deque总结

deque是介于数组和链表之间,它兼顾了数组和链表的优点,它是分块的链表和多个数组的联合。

所以它有比list好的查询性能,有比vector好的插入、删除性能。

如果你需要随机存取又关心两端数据的插入和删除,那么deque是最佳之选。

Good  Good  Study,  Day  Day   Up.

顺序  选择  循环  总结

STL容器之deque的更多相关文章

  1. [知识点]C++中STL容器之map

    UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...

  2. C++顺序容器之deque初探

    C++顺序容器之deque初探 deque是双端队列,与vector非常相似,是顺序容器,不同的是,deque可以在数组开头和末尾插入和删除数据.支持快速随机访问. #include<iostr ...

  3. [知识点]C++中STL容器之set

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...

  4. [知识点]C++中STL容器之vector

    零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...

  5. C++STL模板库序列容器之deque

    目录 一丶队列容器deque简介 二丶使用代码演示 一丶队列容器deque简介 deque底层跟vector一样,都是数组维护.不同的是可以操作头部. 二丶使用代码演示 #define _CRT_SE ...

  6. STL序列容器之deque

    一,deque的基础知识 1.deque的基础 deque是“double-ended-queue”的缩写,意思是双端队列,其和vector的区别在于vector是单端的. deque在头部和尾部插入 ...

  7. C++ STL容器之 stack

    STL 中的 stack 是一种容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为st ...

  8. STL容器之map

    [1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...

  9. STL容器之vector

    [1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...

随机推荐

  1. Tacacs+认证详细调研

    1 .TACACS+概述 1.1   什么是TACACS+ TACACS+(Terminal Access Controller Access Control System,终端访问控制器控制系统协议 ...

  2. sql server误删数据恢复delete(低效版)

    关键词:sql server误删数据恢复,mssql误删数据恢复,delete --切换数据库 use master --构建函数 Create PROCEDURE Recover_Deleted_D ...

  3. Python3学习之路~5.2 time & datetime模块

    time模块 时间相关的操作,时间有三种表示方式: 时间戳               1970年1月1日之后的秒,即:time.time() 格式化的字符串    2014-11-11 11:11, ...

  4. perfmon——使用windows系统自带的性能监视器监控进程信息

    第一次使用perfmon监控应用进程的信息,步骤总结如下: 第一部分 性能监视器 1.快捷键Win+R打开运行界面,输入“perfmon”命令后回车即可打开windows的性能监视器 2.点击“性能监 ...

  5. HTML中--定义header和footer高度中间自适应

    <html> <head> <meta charset="utf-8" /> <title></title> <s ...

  6. Eclipse如何导入DemoWeb.rar

    1   安装gradle,https://my.oschina.net/cccyb/blog/692487 2  import---Gradle Project,然后 Build Model 3  点 ...

  7. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  8. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

  9. Linux挂载共享命令

    用于多台Linux服务器之间共享数据: mount -t cifs -o username=administrator,password=" //10.10.51.202/m /bak

  10. gperftools 使用经验总结

    先看了网上的一些资料,但都不太适合我.还是看了详细的资料才学会怎么用. 按照 http://www.cnblogs.com/persistentsnail/p/3294843.html,yum安装gp ...