C++ deque类使用详解

  • 定义
  • 基本操作
  • 结构体队列赋值
  • 参考链接

定义

    deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分安插元素则比较费时,因为必须移动其它元素。
使用之前必须加相应容器的头文件:

#include <deque> // deque属于std命名域的,因此需要通过命名限定,例如using std::deque;

定义的实现代码如下:

deque<int> a; // 定义一个int类型的双端队列a
deque<int> a(10); // 定义一个int类型的双端队列a,并设置初始大小为10
deque<int> a(10, 1); // 定义一个int类型的双端队列a,并设置初始大小为10且初始值都为1
deque<int> b(a); // 定义并用双端队列a初始化双端队列b
deque<int> b(a.begin(), a.begin()+3); // 将双端队列a中从第0个到第2个(共3个)作为双端队列b的初始值

除此之外,还可以直接使用数组来初始化向量:

int n[] = { 1, 2, 3, 4, 5 };
// 将数组n的前5个元素作为双端队列a的初值
// 说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
// 这个主要是为了和deque.end()指针统一。
deque<int> a(n, n + 5);
deque<int> a(&n[1], &n[4]); // 将n[1]、n[2]、n[3]作为双端队列a的初值

基本操作

容量函数:

#include <iostream>
#include <deque>using namespace std;int main(int argc, char* argv[])
{deque<int> deq;for (int i = 0; i<6; i++){deq.push_back(i);}cout << deq.size() << endl; // 输出:6cout << deq.max_size() << endl; // 输出:1073741823deq.resize(0); // 更改元素大小cout << deq.size() << endl; // 输出:0if (deq.empty())cout << "元素为空" << endl; // 输出:元素为空return 0;
}

添加函数:

#include <iostream>
#include <deque>using namespace std;int main(int argc, char* argv[])
{deque<int> deq;// 头部增加元素deq.push_front(4);// 末尾添加元素deq.push_back(5);// 任意位置插入一个元素deque<int>::iterator it = deq.begin();deq.insert(it, 2);// 任意位置插入n个相同元素it = deq.begin(); // 必须要有这句deq.insert(it, 3, 9);// 插入另一个向量的[forst,last]间的数据deque<int> deq2(5,8);it = deq.begin(); // 必须要有这句deq.insert(it, deq2.end() - 1, deq2.end());// 遍历显示for (it = deq.begin(); it != deq.end(); it++)cout << *it << " "; // 输出:8 9 9 9 2 4 5cout << endl;return 0;
}

删除元素:

#include <iostream>
#include <deque>using namespace std;int main(int argc, char* argv[])
{deque<int> deq;for (int i = 0; i < 8; i++)deq.push_back(i);// 头部删除元素deq.pop_front();// 末尾删除元素deq.pop_back();// 任意位置删除一个元素deque<int>::iterator it = deq.begin();deq.erase(it);// 删除[first,last]之间的元素deq.erase(deq.begin(), deq.begin()+1);// 遍历显示for (it = deq.begin(); it != deq.end(); it++)cout << *it << " ";cout << endl;// 清空所有元素deq.clear();// 遍历显示for (it = deq.begin(); it != deq.end(); it++)cout << *it << " "; // 输出:3 4 5 6cout << endl;return 0;
}

访问元素:

#include <iostream>
#include <deque>using namespace std;int main(int argc, char* argv[])
{deque<int> deq;for (int i = 0; i < 6; i++)deq.push_back(i);// 下标访问cout << deq[0] << endl; // 输出:0// at方法访问cout << deq.at(0) << endl; // 输出:0// 访问第一个元素cout << deq.front() << endl; // 输出:0// 访问最后一个元素cout << deq.back() << endl; // 输出:5return 0;
}

结构体队列赋值

#include <queue>
#include <iostream>
struct MyStruct
{int num;
};
int main()
{// 定义双端队列std::deque<MyStruct> q;MyStruct s1;s1.num = 1;// 插入队尾q.push_back(s1);MyStruct s2;s2.num = 5;// 插入队首q.push_front(s2);// 取出队首元素MyStruct s2_copy = q.front();MyStruct s1_copy = q.back();std::cout << "s2 = " <<s2_copy.num << std::endl;std::cout << "s1 = " << s1_copy.num << std::endl;// 队首元素从队列中移除q.pop_front();// 队尾元素从队列中移除q.pop_back();// 判断队列是否为空if (q.empty()){std::cout << "Enpty" << std::endl;}return 0;
}

参考链接

C++ STL deque使用详解
c++如何定义一个结构体队列

C++ deque类使用详解相关推荐

  1. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  2. .net System.Web.Caching.Cache缓存类使用详解(转载)

    转自:http://www.cnblogs.com/virusswb/articles/1681561.html net System.Web.Caching.Cache缓存类使用详解 System. ...

  3. ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解

    一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...

  4. Java记录 -22- Java的基类Object详解

    Java的基类Object详解 Java的JDK文档要经常查阅使用,最好查看英文的文档. Oracle官方在线 Java API Specifications http://www.oracle.co ...

  5. C#中NameValueCollection类用法详解

    C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCol ...

  6. pythonsvc_sklearn-SVC实现与类参数详解

    sklearn-SVC实现与类参数 它是基于libsvm实现的.随着样本数量的增加,拟合时间的复杂度要高于二次,这就使得当样板数量超过一万个时,很难扩展到数据集中. 在多类处理时,是按照1对1的方案进 ...

  7. laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...

    <PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解>要点: 本文介绍了PHP实例:laravel通过创建自定义artisan make命令来新建类文件详 ...

  8. (117)System Verilog类继承详解

    (117)System Verilog类继承详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类继承详解 5)结语 1.2 FPGA ...

  9. (116)System Verilog类合成(类包含关系)详解

    (116)System Verilog类合成(类包含关系)详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类合成(类包含关系)详解 ...

  10. (31)System Verilog类class详解

    (31)System Verilog类class详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类class详解 5)结语 1.2 ...

最新文章

  1. js左侧三级菜单导航代码
  2. fullPage教程 -- 整屏滚动效果插件 fullpage详解
  3. vue读取redis 值_Jmeter连接Redis,一定很容易学会吧
  4. oracle 只读同名词,Oracle创建只读用户,授予视图/同义词/会话权限
  5. NS2安装错误系列(1)
  6. Win11系统语言修改不了中文怎么办
  7. 使用pycharm创建一个项目 利用自己建好的虚拟环境
  8. python知识点总结
  9. 18、监听器/国际化
  10. 软件部署——nvidia-docker的学习笔记
  11. Spring 事务 状态信息的创建、回滚、清理、提交
  12. Axure RP一个专业的高速原型设计工具
  13. mysql中文坑爹的东西
  14. 对于“增霸卡“的介绍跟使用
  15. 树莓派使用usb摄像头
  16. 敏感词高效检测从浅到深
  17. c语言程序设计小球弹跳,C++Dos游戏设计——弹跳小球
  18. win7为什么安装不了python_【如何在win7下安装Python及配置】电脑无法安装python
  19. SD-WAN基本介绍
  20. java为什么匿名内部类的参数引用需要添加final?

热门文章

  1. Rime解决二三候选用分号和加减号翻页,以及设置禁止调频的问题
  2. luoguP2123 皇后游戏(贪心)
  3. 2022-2028全球硅胶线行业调研及趋势分析报告
  4. docke 安装rap_RAP2:使用docker镜像进行构建,启动部署
  5. 如何设置普通网页的微信分享图标
  6. 儿童手工制作日历_变废为宝的手工日历小台历制作教程
  7. 【编程题】【Scratch一级】2019.12 小狗长大记
  8. 美国亚马逊编辑推荐的一生必读书单100本
  9. MBR10100FCT-ASEMI肖特基二极管MBR10100FCT
  10. cURL – POST请求示例