C++中deque的用法(超详细,入门必看)

简介: ⭐一、deque的简介deque是一个双向队列(double-ended queue),可以在队列的两端进行元素的插入和删除操作。deque的全称是double-ended queue,翻译过来就是双端队列,也有人称之为双向队列,这两个名称都可以表示该数据结构。deque是C++STL(标准模板库)中的一种容器,可以用于存储各种类型的元素。deque的特点是可以在队列的两端进行元素的操作,并且可以高效地在队列的任意位置进行元素的插入和删除操作。可以说deque几乎涵盖了queue(队列)、stack(堆栈)、vector(向量 )等的全部用法,功能非常的强大。

⭐一、deque的简介

deque是一个双向队列(double-ended queue),可以在队列的两端进行元素的插入和删除操作。deque的全称是double-ended queue,翻译过来就是双端队列,也有人称之为双向队列,这两个名称都可以表示该数据结构。deque是C++STL(标准模板库)中的一种容器,可以用于存储各种类型的元素。deque的特点是可以在队列的两端进行元素的操作,并且可以高效地在队列的任意位置进行元素的插入和删除操作。

可以说deque几乎涵盖了queue(队列)、stack(堆栈)、vector(向量 )等的全部用法,功能非常的强大。

使用queue时需要包含头文件:

 #include<deque>

⭐二、deque的定义及初始化

  • 定义
    deque<数据类型>容器名
    例:
//deque的定义 
deque<int>d1; //定义一个储存数据类型为int的双端队列d1 
deque<double>d2; //定义一个储存数据类型为double的双端队列d2 
deque<string>d3; //定义一个储存数据类型为string的双端队列d3 
deque<结构体类型>d4; //定义一个储存数据类型为结构体类型的双端队列d4 
deque<int> d5[N]; //定义一个储存数据类型为int的双端队列数组d5 
deque<double>d6[N]; //定义一个储存数据类型为double的双端队列数组d6 

⭐三、deque的成员函数

关于deque的常用函数:

push_back()//在队列的尾部插入元素。
emplace_front()//与push_front()的作用一样 
push_front()//在队列的头部插入元素。
emplace_back()//与push_back()的作用一样 
pop_back()//删除队列尾部的元素。
pop_front()//删除队列头部的元素。
back()//返回队列尾部元素的引用。
front()//返回队列头部元素的引用。
clear()//清空队列中的所有元素。
empty()//判断队列是否为空。
size()//返回队列中元素的个数。
begin()//返回头位置的迭代器
end()//返回尾+1位置的迭代器
rbegin()//返回逆头位置的迭代器 
rend()//返回逆尾-1位置的迭代器 
insert()//在指定位置插入元素 
erase()//在指定位置删除元素 
push_bac

示例代码:

#include<iostream>
#include<deque>
using namespace std;
int main()
{
  deque<int> d; //定义一个数据类型为int的deque
  d.push_back(1); //向队列中加入元素1 
  d.push_back(2); //向队列中加入元素2
  d.push_back(3); //向队列中加入元素3
  d.push_back(4); //向队列中加入元素4
  cout<<"双端队列中现在的元素为:"<<endl;
  for(int i=0;i<d.size();i++)
  {
    cout<<d[i]<<" ";
  }
  cout<<endl;
  d.pop_front();
  cout<<"弹出队首元素后,双端队列中现在的元素为:"<<endl;
  for(int i=0;i<d.size();i++)
  {
    cout<<d[i]<<" ";
  }
  cout<<endl;
  d.pop_back();
  cout<<"弹出队尾元素后,双端队列中现在的元素为:"<<endl;
  for(int i=0;i<d.size();i++)
  {
    cout<<d[i]<<" ";
  }
  cout<<endl;
  d.push_back(6);
  cout<<"在队尾添加元素6后,双端队列中现在的元素为:"<<endl;
  for(int i=0;i<d.size();i++)
  {
    cout<<d[i]<<" ";
  }
  cout<<endl;
  d.push_front(8);
  cout<<"在队首添加元素8后,双端队列中现在的元素为:"<<endl;
  for(int i=0;i<d.size();i++)
  {
    cout<<d[i]<<" ";
  }
}

运行结果:

双端队列中现在的元素为:
1 2 3 4
弹出队首元素后,双端队列中现在的元素为:
2 3 4
弹出队尾元素后,双端队列中现在的元素为:
2 3
在队尾添加元素6后,双端队列中现在的元素为:
2 3 6
在队首添加元素8后,双端队列中现在的元素为:
8 2 3 6

⭐四、deque的遍历方法

  • 1.通过迭代器iterator遍历
#include<iostream>
#include<deque>
using namespace std;
int main()
{
  deque<int> d; //定义一个数据类型为int的deque
  d.push_back(1); //向队列中加入元素1 
  d.push_back(2); //向队列中加入元素2
  d.push_back(3); //向队列中加入元素3
  d.push_back(4); //向队列中加入元素4
  deque<int>::iterator it;
  for(it=d.begin();it!=d.end();it++)
  {
    cout<<*it<<" ";
  }
}

运行结果:

11 2 3 4
  • 2.通过下标遍历
#include<iostream>
#include<deque>
using namespace std;
int main()
{
  deque<int> d; //定义一个数据类型为int的deque
  d.push_back(1); //向队列中加入元素1 
  d.push_back(2); //向队列中加入元素2
  d.push_back(3); //向队列中加入元素3
  d.push_back(4); //向队列中加入元素4
  for(int i=0;i<d.size();i++)
  {
    cout<<d[i]<<" ";
  }
}

运行结果:

1 2 3 4
  • 3.通过foreach遍历
#include<iostream>
#include<deque>
using namespace std;
int main()
{
  deque<int> d; //定义一个数据类型为int的deque
  d.push_back(1); //向队列中加入元素1 
  d.push_back(2); //向队列中加入元素2
  d.push_back(3); //向队列中加入元素3
  d.push_back(4); //向队列中加入元素4
  for(int it:d)
  {
    cout<<it<<" ";
  }
}

运行结果:

1 2 3 4

⭐五、写在最后

OK本文的学习就到此结束啦,希望本文可以帮助到各位有需要的小伙伴们喔,也希望各位小伙伴们可以不要吝惜手里的三连哦!感谢你们的支持,你们的支持就是我创作最大的动力哦!❤️❤️❤️

💕 回头看,轻舟已过万重山,向前看,前路漫漫亦漫漫。

相关文章
|
23天前
|
存储 C++ 容器
【C++】map、set基本用法
本文介绍了C++ STL中的`map`和`set`两种关联容器。`map`用于存储键值对,每个键唯一;而`set`存储唯一元素,不包含值。两者均基于红黑树实现,支持高效的查找、插入和删除操作。文中详细列举了它们的构造方法、迭代器、容量检查、元素修改等常用接口,并简要对比了`map`与`set`的主要差异。此外,还介绍了允许重复元素的`multiset`和`multimap`。
29 3
【C++】map、set基本用法
|
1天前
|
C++
第十三问:C++中静态变量的用法有哪些?
本文介绍了 C++ 中静态变量和函数的用法及原理。静态变量包括函数内的静态局部变量和类中的静态成员变量,前者在函数调用间保持值,后者属于类而非对象。静态函数不能访问非静态成员,但可以通过类名直接调用。静态链接使变量或函数仅在定义文件内可见,避免命名冲突。
7 0
|
1天前
|
存储 安全 编译器
第二问:C++中const用法详解
`const` 是 C++ 中用于定义常量的关键字,主要作用是防止值被修改。它可以修饰变量、指针、函数参数、返回值、类成员等,确保数据的不可变性。`const` 的常见用法包括:
11 0
|
2月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
47 2
C++入门12——详解多态1
|
2月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
87 1
|
2月前
|
存储 安全 编译器
【C++打怪之路Lv1】-- 入门二级
【C++打怪之路Lv1】-- 入门二级
24 0
|
2月前
|
自然语言处理 编译器 C语言
【C++打怪之路Lv1】-- C++开篇(入门)
【C++打怪之路Lv1】-- C++开篇(入门)
35 0
|
2月前
|
分布式计算 Java 编译器
【C++入门(下)】—— 我与C++的不解之缘(二)
【C++入门(下)】—— 我与C++的不解之缘(二)
|
2月前
|
编译器 Linux C语言
【C++入门(上)】—— 我与C++的不解之缘(一)
【C++入门(上)】—— 我与C++的不解之缘(一)
|
2月前
|
编译器 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
37 0