【C++篇】讲解deque容器的基本操作

发布时间:2023年12月26日


在这里插入图片描述

🍔简述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);
}

在这里插入图片描述

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

文章来源:https://blog.csdn.net/m0_72853403/article/details/135145179
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。