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,遍历写法通用
相关推荐
沐知全栈开发1 小时前
Scala Iterator(迭代器)
开发语言
篮子里的玫瑰1 小时前
Python与网络爬虫——字典与集合
开发语言·python
良木生香1 小时前
【C++初阶】STL——Vector从入门到应用完全指南(1)
开发语言·c++·神经网络·算法·计算机视觉·自然语言处理·数据挖掘
Brilliantwxx1 小时前
【C++】String的模拟实现(代码实现与坑点讲解)
开发语言·c++·笔记·算法
skilllite作者1 小时前
Zed 1.0 编辑器深度评测与实战指南
开发语言·人工智能·windows·python·编辑器·agi
楼田莉子1 小时前
仿Muduo的高并发服务器:Channel模块与Poller模块
linux·服务器·c++·学习·设计模式
zhouwy1132 小时前
Linux网络编程从入门到精通
linux·c++
迷途之人不知返2 小时前
deque的简单认识
数据结构·c++
上弦月-编程2 小时前
指针编程:高效内存管理核心
java·数据结构·算法