C++引用与指针:核心区别全解析

一、deque 是什么

deque 全称:double-ended queue 双端队列特点:

  1. 可以在头部、尾部都快速插入、删除
  2. 支持随机访问 ,像数组一样能用下标 []
  3. 底层不是连续一块内存,是分段连续空间
  4. 相比 vector:头尾操作更快,中间插入依然慢

头文件:

复制代码
#include <deque>
using namespace std;

二、deque 初始化四种方式

复制代码
// 1. 空容器
deque<int> d1;

// 2. 5个元素,默认0
deque<int> d2(5);

// 3. 5个元素,初始值都是8
deque<int> d3(5, 8);

// 4. 直接列表初始化
deque<int> d4 = {1,2,3,4,5};

三、deque 核心增删接口

1. 头尾插入

复制代码
deque<int> d;

d.push_back(10);   // 尾部加
d.push_front(20);  // 头部加
d.push_back(30);

2. 头尾删除

复制代码
d.pop_back();     // 删尾
d.pop_front();    // 删头

3. 取值与修改

支持下标随机访问:

复制代码
cout << d[0];
d[1] = 66;

4. 容量与清空

cpp

运行

复制代码
d.size();         // 元素个数
d.empty();        // 判断是否为空
d.clear();        // 清空所有元素

四、三种遍历方式

1. 下标遍历

复制代码
for(int i = 0; i < d.size(); i++)
{
    cout << d[i] << " ";
}

2. 迭代器遍历(STL 标准)

复制代码
for(deque<int>::iterator it = d.begin(); it != d.end(); it++)
{
    cout << *it << " ";
}

3. 范围 for 遍历(最简)

复制代码
for(int x : d)
{
    cout << x << " ";
}

五、完整示例代码

复制代码
#include <iostream>
#include <deque>
using namespace std;

int main()
{
    deque<int> d;

    // 头尾插入
    d.push_back(1);
    d.push_back(2);
    d.push_front(100);
    d.push_front(200);

    cout << "遍历所有元素:";
    for(int val : d)
    {
        cout << val << " ";
    }
    cout << endl;

    // 删除头尾
    d.pop_front();
    d.pop_back();

    cout << "删除后:";
    for(int val : d)
    {
        cout << val << " ";
    }

    return 0;
}

输出:

复制代码
遍历所有元素:200 100 1 2
删除后:100 1

六、vector vs deque 核心对比

表格

特性 vector deque
底层结构 连续内存数组 分段块内存
尾部增删 极快 快
头部增删 很慢(整体后移) 极快
随机访问 支持 \[\] 支持 \[\]
中间插入 慢 慢
适用场景 纯尾部操作、随机访问多 需要频繁头尾增删

七、新手易错点

  1. 误以为 deque 中间插入很快(依然很慢)
  2. 混用 push_front / pop_front 忘记是 deque 专属,vector 没有
  3. 迭代器遍历中频繁增删,导致迭代器失效
  4. 分不清什么时候选 vector、什么时候选 deque

八、今日总结

  1. deque 是双端队列,头尾都能高效增删
  2. 支持下标随机访问,用法和 vector 很像
  3. 独有接口:push_front / pop_front
  4. 头尾操作多选 deque,只在尾部操作用 vector
  5. 同样支持迭代器、范围 for,遍历写法通用
相关推荐
阿里嘎多学长5 小时前
2026-10-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
布吉岛的石头6 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
小羊没烦恼!6 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
quantdash_cc7 小时前
从实时行情到价格观察表:用 Python 和 Pandas 构建策略输入数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
昂好的day8 小时前
VisionMaster 通信模块实战(上):Modbus、TCP 收发、协议组装解析
开发语言·网络·网络协议·tcp/ip·c#
罗湖老棍子8 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环
努力实干9 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
NetX行者10 小时前
四语言 Hello World 背后:编译模型与运行时对比
开发语言
Pin_Qing11 小时前
账单没超,请求先被拒了
大数据·开发语言·人工智能
2601_9628857211 小时前
如何用 Python 计算 VaR 和 CVaR(在险价值)?
开发语言·python