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,为什么还要 ...
随机推荐
- Tacacs+认证详细调研
1 .TACACS+概述 1.1 什么是TACACS+ TACACS+(Terminal Access Controller Access Control System,终端访问控制器控制系统协议 ...
- sql server误删数据恢复delete(低效版)
关键词:sql server误删数据恢复,mssql误删数据恢复,delete --切换数据库 use master --构建函数 Create PROCEDURE Recover_Deleted_D ...
- Python3学习之路~5.2 time & datetime模块
time模块 时间相关的操作,时间有三种表示方式: 时间戳 1970年1月1日之后的秒,即:time.time() 格式化的字符串 2014-11-11 11:11, ...
- perfmon——使用windows系统自带的性能监视器监控进程信息
第一次使用perfmon监控应用进程的信息,步骤总结如下: 第一部分 性能监视器 1.快捷键Win+R打开运行界面,输入“perfmon”命令后回车即可打开windows的性能监视器 2.点击“性能监 ...
- HTML中--定义header和footer高度中间自适应
<html> <head> <meta charset="utf-8" /> <title></title> <s ...
- Eclipse如何导入DemoWeb.rar
1 安装gradle,https://my.oschina.net/cccyb/blog/692487 2 import---Gradle Project,然后 Build Model 3 点 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- Python小数据池,代码块
今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. ...
- Linux挂载共享命令
用于多台Linux服务器之间共享数据: mount -t cifs -o username=administrator,password=" //10.10.51.202/m /bak
- gperftools 使用经验总结
先看了网上的一些资料,但都不太适合我.还是看了详细的资料才学会怎么用. 按照 http://www.cnblogs.com/persistentsnail/p/3294843.html,yum安装gp ...