STL容器之deque
【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的更多相关文章
- [知识点]C++中STL容器之map
UPDATE(20190416):写完vector和set之后,发现不少内容全部引导到map上了……于是进行了一定的描述补充与更正. 零.STL目录 1.容器之map 2.容器之vector 3.容器 ...
- C++顺序容器之deque初探
C++顺序容器之deque初探 deque是双端队列,与vector非常相似,是顺序容器,不同的是,deque可以在数组开头和末尾插入和删除数据.支持快速随机访问. #include<iostr ...
- [知识点]C++中STL容器之set
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 继上期的vector之后,我们又迎来了另一个类数组的STL容器——set. 二.用途与特性 set,顾名思义,集合 ...
- [知识点]C++中STL容器之vector
零.STL目录 1.容器之map 2.容器之vector 3.容器之set 一.前言 关于STL和STL容器的概念参见STL系列第一篇——map(见上).今天介绍第二个成员——vector. 二.用途 ...
- C++STL模板库序列容器之deque
目录 一丶队列容器deque简介 二丶使用代码演示 一丶队列容器deque简介 deque底层跟vector一样,都是数组维护.不同的是可以操作头部. 二丶使用代码演示 #define _CRT_SE ...
- STL序列容器之deque
一,deque的基础知识 1.deque的基础 deque是“double-ended-queue”的缩写,意思是双端队列,其和vector的区别在于vector是单端的. deque在头部和尾部插入 ...
- C++ STL容器之 stack
STL 中的 stack 是一种容器适配器,而不是一种容器. 它是容器适配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作为st ...
- STL容器之map
[1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...
- STL容器之vector
[1]模板类vector 模板类vector可理解为广义数组.广义数组,即与类型无关的数组,具有与数组相同的所有操作. 那么,你或许要问:既然C++语言本身已提供了一个序列式容器array,为什么还要 ...
随机推荐
- sublime 指定打开某文件的类型(text/plain)
看下图,点击open all width ...选取你指定文件,以后打开都是你指定文件类型
- 8.0-uC/OS-III临界段
1.临界段 (临界段代码,也叫临界区,是指那些必须完整连续运行,不可被打断的代码段) 锁调度器,可以执行ISR,开启调度器不可执行ISR: (1).临界段代码,也称作临界域,是一段不可分割的代码. u ...
- centos7安装webmin
安装webmin准备centos7系统1.下载http://download.webmin.com/download/yum/选择:webmin-1.700-1.noarch.rpm 安装包 wget ...
- 接口测试工具-Jmeter使用笔记(四:响应断言)
Jmeter中断言的类型有许多,我不在这里一一列举,只说下我用到的---响应断言. 作用:一个HTTP请求发出去,怎么判断执行的任务是否成功呢?通过检查服务器响应数据,是否返回预期想要的数据,如果是, ...
- innodb_flush_method理解【转】
innodb_flush_method这个参数控制着innodb数据文件及redo log的打开.刷写模式,对于这个参数,文档上是这样描述的: 有三个值:fdatasync(默认),O_DSYNC,O ...
- 20171018 在小程序页面去获取用户的OpenID
1. 在小程序的.js 文件中增加代码 //加载页面时到后台服务去获取openID onLoad: function (options) { //OpenId wx.login({ //获取code ...
- 20170803 Airflow自带的API进行GET 和POST动作部分内容
--1 首先你要有安装好的Airflow 环境并且在配置文件中有启用API 属性 --2 就是GET 和POST 方法的调用了 这里说一下,由于Airflow在网络上的资料比较少,可以从GETHUB中 ...
- what's the python之异常处理
what's the 异常 python程序中会出现异常,即bug.若出现异常程序就报错,异常之后的代码就不会继续往下执行,这是一个正常程序不允许出现的,但是在某些程序交互的时候难免会因为用户输入问题 ...
- 细细探究MySQL Group Replicaiton — 配置维护故障处理全集(转)
如果转载,请注明博文来源: www.cnblogs.com/xinysu/ ,版权归 博客园 苏家小萝卜 所有.望各位支持!
- (转)Java静态内部类的实例化问题
最近遇到的一个问题,记录一下. 静态内部类可以被实例化! 1.首先在外部类中的static方法中不能使用普通内部类,因为内部类必须要与外部类建立关联才能使用,可以说是同生共死. 2.我在编码过程中,需 ...