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,为什么还要 ...
随机推荐
- Python开发【笔记】:列表转字典
列表转字典 it = [1,2,3,4] print(dict(zip(it, it))) # {1: 1, 2: 2, 3: 3, 4: 4} it = iter(it) print(dict(zi ...
- PyChram快捷键
- 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ
正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...
- fopen 的使用
1, fopen() 的使用,在linux环境下,我们可以使用man fopen查看使用说明: #include <stdio.h> FILE *fopen(const char *pat ...
- LeetCode-860. Lemonade Change
At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and ...
- 20181017 PL/SQL 记录
1. 配置DB 链接文件,帮助中找到tnsnames.ora文件路径,进行注册数据库信息,登陆即可. 这只是个客户端,具体服务器段数据库情况不清楚. 2.写法区别PL/SQL 和SQL 变量定义 赋值 ...
- AdvStringGrid常用操作
AdvStringGrid1.Options:=[goEditing]; then CanEdit := True;end; //设置单元格对齐方式 procedure TForm1.AdvStrin ...
- GPT转MBR怎么转?
GPT转MBR分区怎么转?现在很多笔记本的硬盘分区都是GPT模式,如果想装XP的话,那只能将GPT磁盘转换成MBR磁盘分区才行.接下来,简单说说如何将GPT分区转成MBR分区! 如果本身电脑有两个硬盘 ...
- centos7下git服务器端搭建
git的安装: yum 源仓库里的 Git 版本更新不及时,最新版本的 Git 是 1.8.3.1,但是官方最新版本已经到了 2.9.2.想要安装最新版本的的 Git,只能下载源码进行安装. 1. 查 ...
- Pycharm增加新安装Python的路径
Pycharm默认的Python是python2,但是如果代码是python3写的,就需要在pycharm里的project interpreter增加python3 注意,一定要找到Project ...