deque(双端队列)是 C++ 标准库中的一种容器,它允许在两端高效地进行插入和删除操作。下面我会使用理论来解释 C++ 的 deque 容器。
deque 是一个双向开口的连续存储空间,类似于 vector 容器,但与 vector 不同的是,deque 具备在两端进行高效插入和删除操作的能力。
deque 的特点如下:
deque是双端数组,可以对头部进行插入删除操作
双端队列适用于需要在队列两端进行频繁插入、删除操作的场景,例如:循环队列、任务调度、缓存等。它提供了更灵活的操作方式,使得开发者能够更方便地处理各种队列操作需求。
deque容器的迭代器也是支持随机访问的
Deque 接口继承自 Queue 接口,提供了在队列两端进行操作的方法。具体来说,Deque 接口定义了以下常用方法:
addFirst(element) 或 offerFirst(element):将元素插入到双端队列的开头。
addLast(element) 或 offerLast(element):将元素插入到双端队列的末尾。
removeFirst() 或 pollFirst():移除并返回双端队列的第一个元素。
removeLast() 或 pollLast():移除并返回双端队列的最后一个元素。
getFirst() 或 peekFirst():获取但不移除双端队列的第一个元素。
getLast() 或 peekLast():获取但不移除双端队列的最后一个元素。
Deque 接口有多个实现类,其中最常用的是 LinkedList 类。通过使用 LinkedList 实例化 Deque 对象,就可以使用 Deque 提供的方法来实现双端队列的功能。
#include<iostream>
#include<deque>
using namespace std;
void printDeque(const deque<int>& d) {
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
deque<int>d1;
for (int i = 0; i < 10; i++) {
d1.push_back(i);
}
printDeque(d1);
// = 赋值
deque<int>d2;
d2 = d1;
printDeque(d2);
//assign 赋值
deque<int>d3;
d3.assign(d1.begin(), d1.end());
printDeque(d3);
deque<int>d4;
d4.assign(10, 100);
printDeque(d4);
}
#include<iostream>
#include<deque>
using namespace std;
void printDeque(const deque<int>& d) {
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
deque<int>d1;
for (int i = 0; i < 10; i++) {
d1.push_back(i);
}
printDeque(d1);
if (d1.empty())
{
cout << "d1为空" << endl;
}
else
{
cout << "d1不为空" << endl;
//deque只有大小,对容量没有概念
cout << "d1大小为" << d1.size() << endl;
}
//重新指定大小
printDeque(d1);
d1.resize(15, 1);
printDeque(d1);
}
#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
void printDeque(const deque<int>& d) {
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
deque<int>d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
printDeque(d1);
//默认升序排序
sort(d1.begin(), d1.end());
cout << "排序后" << endl;
printDeque(d1);
}
在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!