携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情
1. deque 数据存取概念
功能描述:
- 对deque 中的数据的存取操作
函数原型:
at(int idx);//返回索引idx所指的数据operator[];//返回索引idx所指的数据front();//返回容器中第一个数据元素back();//返回容器中最后一个数据元素
2. 代码举例说明
#include <deque>
void printDeque(const deque<int>& h)
{
for (deque<int>::const_iterator it = h.begin(); it != h.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
//数据存取
void H01()
{
deque<int> h;
h.push_back(10);
h.push_back(20);
h.push_front(100);
h.push_front(200);
for (int i = 0; i < h.size(); i++) {
cout << h[i] << " ";
}
cout << endl;
for (int i = 0; i < h.size(); i++) {
cout << h.at(i) << " ";
}
cout << endl;
cout << "front:" << h.front() << endl;
cout << "back:" << h.back() << endl;
}
int main() {
H01();
system("pause");
return 0;
}
结论:
- 除了用迭代器获取deque容器中元素,[ ]和at也可以
- front返回容器第一个元素
- back返回容器最后一个元素
3.deque 排序概述
功能描述:
- 利用算法实现对deque容器进行排序
算法:
sort(iterator beg, iterator end)//对beg和end区间内元素进行排序
4.代码举例说明
#include <deque>
#include <algorithm>
void printDeque(const deque<int>& h)
{
for (deque<int>::const_iterator it = h.begin(); it != h.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
void H01()
{
deque<int> h;
h.push_back(10);
h.push_back(20);
h.push_front(100);
h.push_front(200);
printDeque(h);
sort(h.begin(), h.end());
printDeque(h);
}
int main() {
H01();
system("pause");
return 0;
}
结论: sort算法非常实用,使用时包含头文件 algorithm即可
4.deque详细解释说明
-
双端队列(deque)是什么?
-
双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector,
-
双端队列(deque)属于STL(Standard Template Library, 标准模板库)所以使用的也是也是需要先引入:
#include <deque>
- Deque 容器是连续的空间,连续线性空间总是令我们联想到 array 和 vector。array 无法成长,vector 虽可成长,却只能向尾端成长,而且其成 长其实是一个假象,事实上第一步 是申请更大空间 然后原数据复制新空间 最后释放原空 间 三步骤,如果不是 vector 每次配置新的空间时都留有余裕,其成长假象所带来的代价是非常昂贵的。 Deque 是由一段一段的定量的连续空间构成。
- 一旦有必要 在 deque 前端或者尾端增加新的空间,便配置一段连续定量的空间,串接在 deque 的头端或者尾端。Deque 最大的工作就是维护这些分段连续的内存空间的整 体性的假象,并提供随机存取的接口,避开了重新配置空间,复制,释放的轮回, 代价就是复杂的迭代器架构。
- 既然 deque 是分段连续内存空间,那么就必须有中 央控制,维持整体连续的假象,数据结构的设计及迭代器的前进后退操作颇为繁 琐。Deque 代码的实现远比 vector 或 list 都多得多。 Deque 采取一块所谓的 map(注意,不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内 存空间,其中每一个元素(此处成为一个结点)都是一个指针,指向另一段连续性内 存空间,称作缓冲区。缓冲区才是 deque 的存储空间的主体。