C++ 双端队列(deque)的使用

本文介绍了C++中的双端队列(deque)数据结构,它允许在两端进行快速的插入和删除操作,属于STL的一部分。通过实例展示了deque的初始化、与vector的比较以及常用方法,如assign、push、pop、insert等,并提供了代码示例进行操作演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 双端队列(deque)是什么

双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector,

 双端队列(deque)属于STL(Standard Template Library, 标准模板库)所以使用的也是也是需要先引入: #include <deque>

 双端队列(deque)的初始化

#include <iostream>
#include <string>
using namespace std;
#include <deque>

int main()
{
    // 创建一个空的双端队列
    deque<int> a;
    cout << a.size() << endl;
    // 创建一个10个元素对象
    deque<int> b(10);
    // 创建5个元素且5个元素都为明天
    cout << b.size() << endl;
    deque<string> c(5, "明天");
    for (int i = 0; i < b.size(); i++)
    {
        cout << c[i] << endl;
    }
    
    
    return 0;
}

双端队列(deque)与向量(vector)比较

双端队列(deque)与向量(vector)多了可在两端进行push、pop但是缺点是占用内存多
     (1)如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
     (2)如果你需要大量的插入和删除,而不关心随机存取,则应使用list
     (3)如果你需要随机存取,而且关心两端数据的插入和删除,则应使用deque

双端队列(deque)方法说明

函数说明
assign(first,last)用迭代器first和last所在元素替换双端队列元素
assign(num,val)用val的num个副本替换双端队列元素
at(n)返回双端队列中第n个位置元素的值
begin双端队列中第一个元素的引用
back双端队列中最后一个元素的引用
size返回双端队列的个数
front获取双端队列中第一个元素
end获取双端队列中最后一个元素
empty判断双端队列是否为空,为空返回true
clear清空双端队列元素
pop_back删除双端队列中最后一个元素
pop_front删除双端队列中第一个元素
rbegin返回一个反向迭代器,指向双端队列末尾元素之后
rend返回一个反向迭代器,指向双端队列起始元素
erase(i)删除第i位置的元素(注意不能直接为数组,需要用begin或者end)
erase(start,end)

删除指定的元素返回,注意是前包含后不包含,里面不能是数字

insert(i,x)把 i 插入到x位置
insert(i,x,y)把 i 插入到x到y 的位置
swap与另一个vector交换数据

demo 练习

#include <iostream>
#include <string>
using namespace std;
#include <deque>

int main()
{
      // 声明一个string 类型的deque
      deque<string> ve;
      // 获取默认deque的size
      cout << ve.size() << endl;
      //在末尾位置添加元素
      ve.push_back("赵");
      ve.push_back("钱");
      ve.push_back("孙");
      ve.push_back("李");
      // 获取deque的size
      cout << ve.size() << endl;
      // 开始的位置插入元素
      ve.insert(ve.begin(),"百家姓:");
      // 结束的位置插入元素
      ve.insert(ve.end(),"ok");
      //删除指定的元素返回,注意是前包含后不包含,里面不能是数字,
      // ve.erase(ve.begin(),ve.begin()+2);
      // 删除第二个deque元素
      ve.erase(ve.begin()+1);
      //删除最后一个元素
      ve.pop_back();
      // for遍历deque的元素
      for (int i = 0; i < ve.size(); i++)
      {
        cout << ve[i] << endl;     
      }
      //使用迭代器遍历元素
      for(deque<string>::iterator it=ve.begin();it!=ve.end();it++){
            cout<<*it<<endl;
      }
      // 获取deque第一个元素
      cout << ve.front() << endl;
      // 获取deque最后一个元素
      cout << ve.back() << endl;
      //获取第3个位置的元素
      cout << ve.at(2) << endl;
      // deque判空
      if (ve.empty())
      {
            cout << "ve为空" << endl;
      }
      else
      {
            cout << "ve不为空" << endl;
      }
      // 清空deque
      ve.clear();
      return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值