当前位置: 首页 > ai >正文

c++ std::deque

std::deque(双端队列,发音为“deck”)是 C++标准库中的一种非常灵活的数据结构。它的全称是Double-Ended Queue,允许你在队列的两端(头部和尾部)高效地插入和删除元素。std::deque结合了数组和链表的优点,提供了快速的随机访问和高效的插入/删除操作。

1.std::deque的特点

• 高效插入和删除:std::deque允许在头部和尾部高效地插入和删除元素,时间复杂度为O(1)。

• 随机访问:像数组一样,std::deque支持随机访问,可以通过索引快速访问元素,时间复杂度为O(1)。

• 动态大小:std::deque的大小是动态的,可以根据需要自动扩展。

2.常见用法

2.1 包含头文件
在使用std::deque之前,需要包含头文件<deque>

#include <deque>

2.2 初始化
你可以通过多种方式初始化std::deque

#include <iostream>
#include <deque>int main() {// 默认初始化std::deque<int> deque1;// 通过初始化列表初始化std::deque<int> deque2 = {1, 2, 3, 4, 5};// 指定大小和初始值std::deque<int> deque3(5, 10); // 5 个元素,每个元素初始化为 10// 从另一个 deque 复制std::deque<int> deque4(deque2);return 0;
}

2.3 插入元素
std::deque提供了多种方法来插入元素:

#include <iostream>
#include <deque>int main() {std::deque<int> deque;// 在尾部插入元素deque.push_back(1);deque.push_back(2);// 在头部插入元素deque.push_front(0);// 在指定位置插入元素deque.insert(deque.begin() + 1, 10); // 在索引 1 的位置插入 10// 打印 deque 的内容for (int num : deque) {std::cout << num << " ";}std::cout << std::endl; // 输出:0 10 1 2return 0;
}

2.4 删除元素
std::deque提供了多种方法来删除元素:

#include <iostream>
#include <deque>int main() {std::deque<int> deque = {0, 10, 1, 2};// 删除尾部元素deque.pop_back();// 删除头部元素deque.pop_front();// 删除指定位置的元素deque.erase(deque.begin() + 1); // 删除索引 1 的元素// 打印 deque 的内容for (int num : deque) {std::cout << num << " ";}std::cout << std::endl; // 输出:1return 0;
}

2.5 访问元素
std::deque支持随机访问,可以通过索引访问元素:

#include <iostream>
#include <deque>int main() {std::deque<int> deque = {1, 2, 3, 4, 5};// 访问头部元素std::cout << "Front element: " << deque.front() << std::endl; // 输出:Front element: 1// 访问尾部元素std::cout << "Back element: " << deque.back() << std::endl; // 输出:Back element: 5// 通过索引访问元素std::cout << "Element at index 2: " << deque[2] << std::endl; // 输出:Element at index 2: 3// 使用 at 方法访问元素(带边界检查)std::cout << "Element at index 2: " << deque.at(2) << std::endl; // 输出:Element at index 2: 3return 0;
}

2.6 遍历
你可以使用范围for循环或迭代器来遍历std::deque

#include <iostream>
#include <deque>int main() {std::deque<int> deque = {1, 2, 3, 4, 5};// 使用范围 for 循环遍历for (int num : deque) {std::cout << num << " ";}std::cout << std::endl; // 输出:1 2 3 4 5// 使用迭代器遍历for (auto it = deque.begin(); it != deque.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl; // 输出:1 2 3 4 5return 0;
}

3.使用场景
std::deque非常适合以下场景:

• 需要在两端频繁插入和删除元素:例如实现队列或栈。

• 需要随机访问元素:虽然std::deque的随机访问性能不如std::vector,但它仍然支持高效的随机访问。

• 动态大小:std::deque的大小可以根据需要动态扩展,不需要预先分配固定大小。

4.总结
std::deque是一个非常灵活的数据结构,结合了数组和链表的优点:

• 高效插入和删除:在头部和尾部的操作时间复杂度为O(1)。

• 随机访问:支持通过索引快速访问元素,时间复杂度为O(1)。

• 动态大小:可以根据需要自动扩展。

希望这些示例能帮助你更好地理解和使用std::deque!如果有任何问题,欢迎随时问我哦。

http://www.xdnf.cn/news/6434.html

相关文章:

  • 国内优质沉金PCB厂家有哪些?
  • MySQL 读写分离
  • Java引用类型
  • Elasticsearch 快速入门指南
  • 山东大学计算机图形学期末复习8——CG11下
  • 文档多模态识别工具对比:MinerU、PaddleOCR、Marker
  • 2089. 找出数组排序后的目标下标——O(n)做法!
  • OpenCV CUDA模块中逐元素操作------数学函数
  • 原生微信小程序 textarea组件placeholder无法换行的问题解决办法
  • Secs/Gem第五讲(基于secs4net项目的ChatGpt介绍)
  • window 显示驱动开发-命令和 DMA 缓冲区简介
  • VBA编程时如何加密数据库连接的账号密码?
  • Ubuntu 编译SRS和ZLMediaKit用于视频推拉流
  • 高效管理多后端服务:Nginx 配置与实践指南
  • 《Python星球日记》 第78天:CV 基础与图像处理
  • 二程运输的干散货船路径优化
  • 图片、音频、视频都能转?简鹿格式工厂了解一下
  • ollama 升级换源
  • Buildroot 移植MiniGUI
  • 牛客网NC21994:分钟计算
  • 【匹配】Needleman–Wunsch
  • 深入理解 Cortex-M 的中断输入和挂起行为
  • RedHat7 如何更换yum镜像源
  • SAM微调fine-tune/PEFT系列论文整理
  • vue-quill-editor富文本编辑器
  • PYTHON训练营DAY26
  • 开发技术.前端开发相关问题
  • RiDoc:高效文档扫描与图像处理工具,助力高效办公
  • 语音识别——通过PyAudio录入音频
  • Secs/Gem第六讲(基于secs4net项目的ChatGpt介绍)