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

C++容器——deque

deque容器

定义:动态数组,是一种双向开口的线性容器,意味着你不仅可以像在普通队列的末尾添加和移除元素,还可以在前端执行这些操作。


与其他容器相比不同的点:

与vector的主要区别:

连续性:

vector保证了内存的连续性,而deque不保证。

插入/删除效率:

在序列的中间插入或删除元素时,deque通常比vector更高效,因为它不需要重

排列所有后续元素。但在尾部或头部操作上,两者都很快。

随机访问:

两者都支持随机访问,但vector的随机访问速度通常更快,因为它的内存布局更为简单直接。

特点和功能:

随机访问:

deque支持随机访问迭代器,它的内部结构可能由多个连续的内存块组成。

动态增长:

deque在需要时自动调整其容量,但它并不保证内存的连续性,与vector不同,deque通过管理多个小块内存来实现这一点。

插入和删除效率:

在deque的开头、结尾或任何位置插入和删除元素都非常高效,特别是对于开头和结尾的操作,因为它们不需要移动大量元素。

内部结构:

deque内部有一个中控器维护着多个缓冲区的地址,每个缓冲区存储一部分数据,实际上是由多个分散的内存块组成的。

构造与操作:

deque提供了多种构造函数用于初始化,以及诸如size(), resize(), erase()等方法来进行大小调整和元素操作。


deque容器使用流程

  1. 使用元组需要加入头文件<deque>
  2. deque容器的定义及初始化
  3. deque容器的使用

加入头文件 

#include<deque>

 deque容器的定义及初始

有五种常用的类型与其他容器的定义与初始化差不多

std::deque<int> first(3); // 创建含有5个默认初始化元素的deque容器std::deque<int> secend = {1, 2, 3}; // 使用花括号列表初始化deque容器std::deque<int> third(3, 10); // 创建含有3个值为10的元素的deque容器std::vector<int> v = {1, 2, 3};
std::deque<int> fourth(v.begin(), v.end()); // 使用迭代器范围初始化deque容器std::deque<int> fifth;
myDeque.assign({1, 2, 3}); // 使用花括号列表初始化deque容器

 deque容器的使用

添加和删除元素

#include<iostream>
#include<deque>
int main()
{std::deque<int> d{1,2,3};d.push_back(1);  // 在队尾添加元素1d.push_front(2); // 在队头添加元素2d.pop_back();    // 删除队尾元素d.pop_front();   // 删除队头元素auto it = d.begin(); // 获取迭代器指向第一个元素d.insert(it, 9);     // 在第一个元素前插入9auto p = d.begin() + 1; // 插入位置在第二个元素之后d.insert(p, 5, 8);      // 在指定位置插入5个8deque<int> another = {4, 5, 6};d.insert(d.end(), another.begin(), another.end()); // 在deque末尾插入another deque的全部元素return 0;
}

访问元素

四种访问方式: 

#include<iostream>
#include<deque>
int main()
{std::deque<int> d{1,2,3};int first = d.front();     // 访问第一个元素int secend = d.back();     // 访问最后一个元素int third = d[1];          // 访问下标为1的元素,不检查下标越界int fourth = d.at(1);      // 访问下标为1的元素,会检查下标越界std::cout << first << std::endl;std::cout << secend << std::endl;std::cout << third << std::endl;std::cout << fourth << std::endl;return 0;
}//输出的结果是
1
3
2
2

 获取/改变容器大小

#include<iostream>
#include<deque>
int main()
{std::deque<int> d;bool is = d.empty(); // 检查deque是否为空,空为1,不空为0size_t size = d.size(); // 获取deque中的元素个数//d.resize(10); // 改变deque的尺寸到10,可能会创建新的元素或删除现有元素std::cout << is;return 0;
}//输出结果是
1

 清除容器

使用clear()

#include<iostream>
#include<deque>
int main()
{std::deque<int> d{1,2,3};d.clear();return 0;
}

http://www.lryc.cn/news/344332.html

相关文章:

  • docker-compose安装es+kibana 8.12.2
  • websevere服务器从零搭建到上线(二)|Linux上的五种IO模型
  • STM32外设编程指南:GPIO、UART、SPI和I2C
  • git对远程和本地分支进行重命名
  • if 语句逻辑判断顺序
  • 第IV章-Ⅱ Vue3中的插槽使用
  • 【半个月我拿下了软考证】软件设计师高频考点--系统化教学-网络安全
  • E2PROM读写函数
  • MySql中什么是回表? 如何减少回表的次数
  • 【Linux】目录和文件相关的命令,补充:centos7系统目录结构
  • 【读点论文】SAM-LIGHTENING: A LIGHTWEIGHT SEGMENT ANYTHING MODEL,改进自注意力机制,然后知识蒸馏提点
  • PostgreSQL函数和运算符
  • 使用网络工具监控网络性能
  • Gradle基础笔记
  • QT+网络调试助手+TCP客户端
  • 数据库调优-SQL语句优化
  • h函数 render函数 JSX基本用法
  • 购物车操作
  • 华为手机 鸿蒙系统-android studio识别调试设备,开启adb调试权限
  • 计算机网络——Dijkstra路由算法
  • AI智能化逐渐趋于成熟后,预测今后最吃香的开发职业
  • Acwing2024蓝桥杯BFS
  • vue打包报错:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
  • 计算机组成原理网课笔记
  • Python学习第四部分 函数式编程
  • 数据结构-二叉树-AVL树(平衡二叉树)
  • 【Qt问题】windeployqt如何提取Qt依赖库
  • VS2019下使用MFC完成科技项目管理系统
  • 【Android】Kotlin学习之数据容器(数组for循环遍历)
  • JavaWeb_请求响应_简单参数实体参数