【C++篇】讲解deque容器的基本操作
🍔简述deque容器
deque(双端队列)是 C++ 标准库中的一种容器,它允许在两端高效地进行插入和删除操作。下面我会使用理论来解释 C++ 的 deque 容器。
deque 是一个双向开口的连续存储空间,类似于 vector 容器,但与 vector 不同的是,deque 具备在两端进行高效插入和删除操作的能力。
deque 的特点如下:
- 随机访问:deque 支持通过索引下标快速访问元素,因此可以像数组一样直接访问和修改元素。
- 动态扩容:deque 的内部实现是一个由多个固定大小的块构成的缓冲区。当需要插入或删除元素时,deque 会根据需要自动分配或释放这些块,保持块的数量足够满足操作需求。
- 两端插入和删除:deque 在两端(前端和后端)都提供了高效的插入和删除操作,包括 push_back()、pop_back()、push_front()、pop_front() 等函数。
- 迭代器支持:deque 提供双向迭代器,可以使用迭代器遍历容器中的元素。
- 不保证连续存储:与 vector 不同,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);
}
在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!