deque容器

deque容器的基本概念

功能

  • deque容器是双端容器,可以对容器的头部进行读写操作;

与vector容器的区别

  • vector是连续的动态数组 而deque是由分段连续的内存块组成的数据结构;
  • vector容器在头部读写数据的效率较低 比如进行头插时需要将之前的所有数据向后挪动一位;
  • vector容器随机访问内部数据的速度更快,因为vector容器的内部内存空间是完全连续的;

deque容器的结构

deque容器由缓冲区和中控器组成

中控器中存储的是每一段缓冲区的地址

每一段缓冲区都是一段连续的内存空间,内部存放容器中的数据


deque容器的迭代器也是支持随机访问的

deque容器的接口

构造函数

cpp 复制代码
//默认构造函数
deque<T>();
//区间拷贝构造函数
deque(begin, end);
//拷贝构造函数,拷贝n个elem元素给创建出的容器
deque(int n, elem);
//拷贝构造函数
deque(const deque& deq);

赋值操作

cpp 复制代码
//通过重载的=运算符赋值
deque& operator=(const deque& deq);
//通过assign函数赋值
assign(begin, end);
assign(int n, elem);
//例
deque<int> deq1;
for(int i = 0; i < 10; i++);
{
	deq1.push_back(i);
}
deque<int> deq2;
deque<int> deq3;
deque<int> deq4;
deq2 = deq1;
deq3.assign(deq2.begin(), deq2.end());
deq4.assign(6,66);

大小操作

cpp 复制代码
//返回deque容器的大小
int size();
//判断容器是否为空
bool empty();
//重新设定容器的大小,与vector类似
void resize(int n);
void resize(int n, elem);

deque容器没有capacity函数,因为deque容器的结构是分段连续的内存,可以动态的分配内存 所以不需要事先预留内存,所以没用容量函数

插入和删除

cpp 复制代码
//头插和尾插
void pop_front();
void push_front(elem);
void pop_back();
void push_back(elem);
//指定位置pos插入
iterator insert(iterator pos, const T& value);
//在指定位置pos插入count数量个value
iterator insert(iterator pos,size_type count const T& value)
//在pos位置将另一个容器[begin,end)范围内的数据拷贝
iterator insert(iterator pos, iterator begin, iterator end)、
//清除容器内的所有元素
void clear()
//删除pos位置的元素
iterator erase(iterator pos);
//删除[begin,end)范围内的元素
iterator erase(iterator begin, iterator end);

上述函数中,所有新增元素的函数返回的都是第一个新增的数据的位置

删除的函数返回的都是被删除的元素的下一个元素的位置

数据的存取

cpp 复制代码
//返回第pos个元素
at(int pos);
//重载[],类似数组 返回低pos个元素
operator[](int pos);
//返回第一个元素
front();
//返回最后一个元素
back();

数据排序

cpp 复制代码
sort(begin, end)

sort()函数是stl库内置的排序函数可以将容器中的数据作升序排序

相关推荐
旖旎夜光7 分钟前
LeetCode 238:除自身以外数组的乘积(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
Escalating_xu18 分钟前
【C++类和对象(上)】从类的定义、封装与对象模型到内存对齐和 this 指针
开发语言·前端·c++
吃着火锅x唱着歌22 分钟前
Effective C++ 学习笔记 条款45 运用成员函数模板接受所有兼容类型
c++·笔记·学习
爱和冰阔落33 分钟前
【Linux】多线程打印为什么会乱?pthread 创建、等待、退出、取消与分离全实战
linux·运维·c++·redis
luj_176836 分钟前
尾椎藏今生记忆?骨盆对应不确定性
开发语言·网络·c++·经验分享·算法
断点之下1 小时前
C++类和对象:六个默认成员函数详解
开发语言·c++
库玛西3 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19999 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
会周易的程序员10 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子11 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt