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,遍历写法通用
相关推荐
kloc2 小时前
聊天室项目入口网关子服务的实现
linux·c++
饮水桶_T3 小时前
JAVA IO流笔记
开发语言·数据结构·算法
csdn_aspnet6 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
Felven6 小时前
C. Brr Brrr Patapim
c语言·开发语言
小七在进步7 小时前
string的使用(2)
c++
路溪非溪7 小时前
python标准库使用总结
开发语言·python
青少儿编程课堂7 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
SomeOtherTime9 小时前
Rust 面向对象介绍(AI回答)
开发语言·python·rust
wo_jack9 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
zh_xuan9 小时前
kotlin常见面试题
开发语言·kotlin·面试题