C++ deque类使用详解
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类使用详解相关推荐
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
- .net System.Web.Caching.Cache缓存类使用详解(转载)
转自:http://www.cnblogs.com/virusswb/articles/1681561.html net System.Web.Caching.Cache缓存类使用详解 System. ...
- ios开发读取剪切板的内容_iOS中管理剪切板的UIPasteboard粘贴板类用法详解
一.自带剪切板操作的原生UI控件在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField.UITextView与UIWebView.在这些控件的文字交互处进行长按手势可以在屏幕视图 ...
- Java记录 -22- Java的基类Object详解
Java的基类Object详解 Java的JDK文档要经常查阅使用,最好查看英文的文档. Oracle官方在线 Java API Specifications http://www.oracle.co ...
- C#中NameValueCollection类用法详解
C#中NameValueCollection类用法详解,1.NameValueCollection类集合是基于 NameObjectCollectionBase 类. 但与 NameObjectCol ...
- pythonsvc_sklearn-SVC实现与类参数详解
sklearn-SVC实现与类参数 它是基于libsvm实现的.随着样本数量的增加,拟合时间的复杂度要高于二次,这就使得当样板数量超过一万个时,很难扩展到数据集中. 在多类处理时,是按照1对1的方案进 ...
- laravel 如何 new php 类,PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解...
<PHP实例:laravel通过创建自定义artisan make命令来新建类文件详解>要点: 本文介绍了PHP实例:laravel通过创建自定义artisan make命令来新建类文件详 ...
- (117)System Verilog类继承详解
(117)System Verilog类继承详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类继承详解 5)结语 1.2 FPGA ...
- (116)System Verilog类合成(类包含关系)详解
(116)System Verilog类合成(类包含关系)详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类合成(类包含关系)详解 ...
- (31)System Verilog类class详解
(31)System Verilog类class详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog类class详解 5)结语 1.2 ...
最新文章
- js左侧三级菜单导航代码
- fullPage教程 -- 整屏滚动效果插件 fullpage详解
- vue读取redis 值_Jmeter连接Redis,一定很容易学会吧
- oracle 只读同名词,Oracle创建只读用户,授予视图/同义词/会话权限
- NS2安装错误系列(1)
- Win11系统语言修改不了中文怎么办
- 使用pycharm创建一个项目 利用自己建好的虚拟环境
- python知识点总结
- 18、监听器/国际化
- 软件部署——nvidia-docker的学习笔记
- Spring 事务 状态信息的创建、回滚、清理、提交
- Axure RP一个专业的高速原型设计工具
- mysql中文坑爹的东西
- 对于“增霸卡“的介绍跟使用
- 树莓派使用usb摄像头
- 敏感词高效检测从浅到深
- c语言程序设计小球弹跳,C++Dos游戏设计——弹跳小球
- win7为什么安装不了python_【如何在win7下安装Python及配置】电脑无法安装python
- SD-WAN基本介绍
- java为什么匿名内部类的参数引用需要添加final?