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

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!如果有任何问题,欢迎随时问我哦。

相关文章:

  • Linux/Centos7离线安装并配置MySQL 5.7
  • 微服务概述
  • Loki的部署搭建
  • OpenCV 图像直方图:从原理剖析到实战应用
  • C++多态实现的必要条件剖析
  • unordered_set和unordered_map
  • AtCoder 第405场初级竞赛 A~E题解
  • 从理论到实战:模糊逻辑算法的深度解析与应用实践
  • 全面掌握JSR303校验:从入门到实战
  • 开发技术.前端开发相关问题
  • 2023年河南CCPC->F题
  • 《Python星球日记》 第81天:回看图像生成与风格迁移
  • 第一个优化
  • 2025年5月15日
  • 策略模式-枚举实现
  • 【蓝桥杯嵌入式】【模块】四、按键相关配置及代码模板
  • (6)python开发经验
  • CSRF攻击 + 观测iframe加载时间利用时间响应差异侧信道攻击 -- reelfreaks DefCamp 2024
  • MySQL数据类型之VARCHAR和CHAR使用详解
  • 湖北理元理律师事务所:债务优化如何实现“减负不降质”?
  • 马上评|重病老人取款身亡,如何避免类似悲剧?
  • 六省会共建交通枢纽集群,中部离经济“第五极”有多远?
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长
  • 一种声音·阿甘本|即将到来的中世纪;“新”与“旧”……
  • 既是工具又是食物,可食用机器人开启舌尖上的新科技
  • 埃尔多安:愿在土耳其促成俄乌领导人会晤