博客
关于我
STL—deque使用及源码剖析
阅读量:519 次
发布时间:2019-03-07

本文共 2414 字,大约阅读时间需要 8 分钟。

deque 概述

deque,也叫双端队列,是一种支持高效插入和删除容器双端元素的数据结构。与向量类似,deque 允许随机访问元素,并且内部通过连续的分段版本实现,给使用者创造了连续的使用感受。其独特之处在于,它不仅支持尾部操作(如向量),还支持头部操作,因此名为双端队列。

deque 的主要特点是支持双端插入和删除操作,且其底层结构为分段连续的数组,虽然内部逻辑复杂,但使用者可以像使用向量一样方便地进行操作。

deque 的常用功能

构造函数

  • deque():创建空 deque。

  • deque(int nSize):创建包含 nSize 个元素的 deque。

  • deque(int nSize, const T& t):创建包含 nSize 个元素且值均为 t 的 deque。

  • deque(const deque&):复制构造函数。

增加函数

  • void push_front(const T& x):在 deque 的头部添加一个元素 x。

  • void push_back(const T& x):在 deque 的尾部添加一个元素 x。

  • iterator insert(iterator it, const T& x):在 it 前的位置插入一个元素 x。

  • void insert(iterator it, int n, const T& x):在 it 前的位置插入 n 个元素 x。

  • void insert(iterator it, const_iterator first, const_iterator last):在 it 前的位置插入 first 到 last 之间的元素。

删除函数

  • iterator erase(iterator it):删除 deque 中的某个元素。

  • iterator erase(iterator first, iterator last):删除 deque 中 first 到 last 之间的元素。

  • void pop_front():删除头部元素。

  • void pop_back():删除尾部元素。

  • void clear():清空 deque。

遍历函数

  • reference at(int pos):返回 pos位置元素的引用。

  • reference front():返回首元素的引用。

  • reference back():返回尾元素的引用。

  • iterator begin():返回向量头指针。

  • iterator end():返回指向末尾元素后一个位置的指针。

  • reverse_iterator rbegin():反向迭代器,指向最后一个元素。

  • reverse_iterator rend():反向迭代器,指向第一个元素前一个元素。

判断函数

  • bool empty() const:判断 deque 是否为空。

容量和大小函数

  • int size() const:返回元素个数。

  • int max_size() const:返回最大允许元素数量。

其他函数

  • void swap(deque&):交换两个 deque。

  • void assign(int n, const T& x):将元素的值设为 x。

deque 源码剖析

deque 内部是分段连续的,其使用者显示为连续。以下是 deque 的源码概述:

template 
class deque {public: typedef T value_type; enum { _S_Bits = ImplementationDefined }; iterator begin() { return start; } iterator end() { return finish; } size_type size() const { return finish - start; } // 其他函数};

控制中心

deque 的控制中心(map)类型设为 T**,每个指针指向一个 buffer。控制中心用于管理 deque 的线性性质。

deque 迭代器

deque 的迭代器通过模拟空间的连续性实现了线性响应:

template 
struct __deque_iterator { // 迭代器属性 iterator Category = random_access_iterator_tag; T value_type; ptr pointer; Ref reference; size_t size_type; T** map_pointer; // 以及其他成员};

插入方法

deque 的 insert 方法根据插入位置选择前迁移或后迁移策略:

iterator insert(iterator position, const value_type& x) {    if (position.cur == start.cur) {        push_front(x);        return start;    } else if (position.cur == finish.cur) {        push_back(x);        iterator tmp = finish;        --tmp;        return tmp;    } else {        return insert_aux(position, x);    }}

这是一篇关于 deque 数据结构详细介绍,涵盖其概述、使用方法、源码剖析以及具体的实现细节。deque 被广泛应用于需要高效双端操作的场景,如系统编程和实时应用中,其性能和灵活性使其成为开发者的理想选择。

转载地址:http://scjnz.baihongyu.com/

你可能感兴趣的文章
oracle字符集
查看>>
oracle存储参数(storage子句)含义及设置技巧
查看>>
Oracle学习
查看>>
ui 图片素材网站
查看>>
Oracle学习总结(10)——45 个非常有用的 Oracle 查询语句
查看>>
Oracle学习总结(2)——Oracle数据库设计总结(三大范式)
查看>>
Oracle学习总结(3)——Navicat客户端连接Oracle数据库常见问题汇总
查看>>
Oracle学习总结(4)——MySql、SqlServer、Oracle数据库行转列大全
查看>>
Oracle学习总结(6)—— SQL注入技术
查看>>
Oracle学习总结(7)—— 常用的数据库索引优化语句总结
查看>>
Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则
查看>>
Oracle学习总结(9)—— Oracle 常用的基本操作
查看>>
oracle学习笔记《二》
查看>>
oracle学习笔记(4)
查看>>
Oracle学习第二天---Profile的使用
查看>>
Oracle学习第五课
查看>>
Oracle安全攻防,你可能不知道自己一直在裸奔
查看>>
Oracle安装、Navicat for Oracle、JDBCl连接、获取表结构
查看>>
Oracle安装与远程连接配置(附Oracle安装包)
查看>>
Oracle官方推荐的性能测试工具!简单、精准又直观!
查看>>