STL 之 deque容器详解
Deque 容器
deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。
使用deque容器之前必须加上<deque>头文件:#include<deuqe>;
deque属于std命名域的内容,因此需要通过命名限定:using std::deque;也可以直接使用全局的命名空间方式:using namespace std;
构造函数
deque<Elem> c 创建一个空的deque
deque<Elem> c1(c2) 复制一个deque。
deque<Elem> c(n) 创建一个deque,含有n个数据,数据均已缺省构造产生。
deque<Elem> c(n, elem) 创建一个含有n个elem拷贝的deque。
deque<Elem> c(beg,end) 创建一个以[beg;end)区间的deque。
~deque<Elem>() 销毁所有数据,释放内存。
成员函数
c.begin()返回指向第一个元素的迭代器
c.end()返回指向最后一个元素下一个位置的迭代器
1 deque<int> d {1,2,3,4,5}; 2 deque<int>::iterator it; 3 for(it=d.begin();it!=d.end();it++){ 4 cout << *it << " "; 5 } 6 cout << endl;
c.rbegin()返回指向反向队列的第一个元素的迭代器(即原队列的最后一个元素)
c.rend()返回指向反向队列的最后一个元素的下一个位置(即原队列的第一个元素的前一个位置)
1 deque<int> d {1,2,3,4,5}; 2 deque<int>::reverse_iterator it; 3 for(it=d.rbegin();it!=d.rend();it++){ 4 cout << *it << " "; 5 } 6 cout << endl;
operator=赋值运算符重载
1 deque<int> d1 {1,2,3,4,5},d2; 2 d2 = d1; 3 deque<int>::iterator it; 4 for(it=d2.begin();it!=d2.end();it++){ 5 cout << *it << " "; 6 } 7 cout << endl;
c.assign(n,num)将n个num拷贝复制到容器c
c.assign(beg,end)将[beg,end)区间的数据拷贝复制到容器c
1 deque<int> d1 {1,2,3,4,5},d2; 2 d2.assign(2, 8); 3 deque<int>::iterator it; 4 cout << "d2.assign(n,num):"; 5 for(it=d2.begin();it!=d2.end();it++){ 6 cout << *it << " "; 7 } 8 d2.assign(d1.begin(), d1.begin()+3); 9 cout << "d2.assign(beg,end):"; 10 for(it=d2.begin();it!=d2.end();it++){ 11 cout << *it << " "; 12 } 13 cout << endl;
c.at(pos)返回索引为pos的位置的元素,会执行边界检查,如果越界抛出out_of_range异常
1 deque<int> d {1,2,3,4,5}; 2 cout << "d.at(pos):" << d.at(2); 3 return 0;
c.operator[]下标运算符重载
1 deque<int> d {1,2,3,4,5}; 2 cout << "d[2]:" << d[2]; 3 return 0;
c.empty()判断c容器是否为空
1 deque<int> d {1,2,3,4,5}; 2 if(!d.empty()){ 3 cout << "d is not empty!" << endl; 4 }else{ 5 cout << "d is empty!" << endl; 6 } 7 return 0;
c.front()返回c容器的第一个元素
c.back()返回c容器的最后一个元素
1 deque<int> d {1,2,3,4,5}; 2 if(!d.empty()){ 3 cout << "d.front():" << d.front() << endl; 4 cout << "d.back(): " << d.back() << endl; 5 }
c.size()返回c容器中实际拥有的元素个数
1 deque<int> d {1,2,3,4,5}; 2 cout << "d.size():" << d.size() << endl; 3 return 0;
c.max_size()返回c容器可能存放元素的最大数量
1 deque<int> d {1,2,3,4,5}; 2 cout << "d.max_size():" << d.max_size() << endl; 3 return 0;
c.clear()清除c容器中拥有的所有元素
1 deque<int> d {1,2,3,4,5}; 2 deque<int>::iterator it; 3 cout << "clear before:" ; 4 for(it=d.begin();it!=d.end();it++){ 5 cout << *it << " "; 6 } 7 cout << endl; 8 d.clear(); 9 cout << "clear after:" ; 10 for(it=d.begin();it!=d.end();it++){ 11 cout << *it << " "; 12 } 13 cout << endl;
c.insert(pos,num)在pos位置插入元素num
c.insert(pos,n,num)在pos位置插入n个元素num
c.insert(pos,beg,end)在pos位置插入区间为[beg,end)的元素
1 deque<int> d {1,2,3,4,5}; 2 deque<int>::iterator it; 3 cout << "insert before:" ; 4 for(it=d.begin();it!=d.end();it++){ 5 cout << *it << " "; 6 } 7 cout << endl; 8 d.insert(d.end(),22); 9 d.insert(d.end(), 3,88); 10 int a[5] = {1,2,3,4,5}; 11 d.insert(d.begin(),a,a+3); 12 cout << "insert after:" ; 13 for(it=d.begin();it!=d.end();it++){ 14 cout << *it << " "; 15 } 16 cout << endl;
c.erase(pos)删除pos位置的元素c.erase(beg,end)删除区间为[beg,end)的元素
c.erase(beg,end)删除区间为[beg,end)之间的元素
1 deque<int> d {1,2,3,4,5}; 2 d.erase(d.begin()); 3 deque<int>::iterator it; 4 cout << "erase(pos) after:" ; 5 for(it=d.begin();it!=d.end();it++){ 6 cout << *it << " "; 7 } 8 cout << endl; 9 d.erase(d.begin(), d.begin()+3); 10 cout << "erase(beg,end) after:" ; 11 for(it=d.begin();it!=d.end();it++){ 12 cout << *it << " "; 13 } 14 cout << endl;
c.push_back(num)在末尾位置插入元素
c.pop_back()删除末尾位置的元素
c.push_front(num)在开头位置插入元素
c.pop_front()删除开头位置的元素
1 deque<int> d {1,2,3,4,5}; 2 d.push_back(10); 3 deque<int>::iterator it; 4 cout << "push_back(num):" ; 5 for(it=d.begin();it!=d.end();it++){ 6 cout << *it << " "; 7 } 8 cout << endl; 9 10 d.pop_back(); 11 cout << "pop_back(num):" ; 12 for(it=d.begin();it!=d.end();it++){ 13 cout << *it << " "; 14 } 15 cout << endl; 16 17 d.push_front(10); 18 cout << "push_front(num):" ; 19 for(it=d.begin();it!=d.end();it++){ 20 cout << *it << " "; 21 } 22 cout << endl; 23 24 d.pop_front(); 25 cout << "pop_front(num):" ; 26 for(it=d.begin();it!=d.end();it++){ 27 cout << *it << " "; 28 } 29 cout << endl; 30 return 0;
c.resize(num)从新定义容器的大小
1 deque<int> d {1,2,3,4,5}; 2 cout << "d.size():" << d.size() << endl; 3 d.resize(d.size()+5); 4 cout << "d.resize() after:" << d.size() <<endl; 5 deque<int>::iterator it; 6 cout << "resize() after:" ; 7 for(it=d.begin();it!=d.end();it++){ 8 cout << *it << " "; 9 } 10 cout << endl;
c1.swap(c2)交换容器c1,c2;
swap(c1,c2)同上。
1 deque<int> d1 {1,2,3,4,5},d2,d3; 2 d1.swap(d2); 3 deque<int>::iterator it; 4 cout << "d1 swap after:" ; 5 for(it=d1.begin();it!=d1.end();it++){ 6 cout << *it << " "; 7 } 8 cout << endl; 9 cout << "d2 swap after:" ; 10 for(it=d2.begin();it!=d2.end();it++){ 11 cout << *it << " "; 12 } 13 cout << endl; 14 15 swap(d3,d2); 16 cout << "d3 swap after:" ; 17 for(it=d3.begin();it!=d3.end();it++){ 18 cout << *it << " "; 19 } 20 cout << endl;
重载运算符
operator==
operator!=
operator<
operator<=
operator>
operator>=
关注 - 0
粉丝 - 11
» 下一篇:单例模式
STL 之 deque容器详解相关推荐
- STL 之 list 容器详解
STL之list容器详解 List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入 ...
- STL关联式容器详解
STL关联式容器类别 1. map 定义在 头文件中,使用该容器存储的数据,其各个元素的键必须是唯一的(即不能重复),该容器会根据各元素键的大小,默认进行升序排序(调用 std::less). 2. ...
- deque容器详解,包含源码
目录 一.概述 二.deque的中控器 三.deque的迭代器 四.deque的数据结构 五.deque的构造和内存管理 5.1 deque的构造 5.2 内存处理 六. deque的优缺点 一.概述 ...
- c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...
- C++STL的deque容器
C++STL的deque容器 deque容器 deque容器基本概念 deque构造函数 deque赋值操作 deque大小操作 deque 插入和删除 deque 数据存取 deque 排序 deq ...
- 读Java并发编程实践记录_原子性_锁_同步容器详解_任务执行
原子性: 单独的,不可分割的操作 不要使用过期状态值来决策当下的状态, 一定要先检查再执行(不检查, 将引发数据修改,丢失) 避免延迟初始化(懒加载: 先查看对象 == null, 然后new), 有 ...
- 【36C++STL-常用容器----5、stack容器详解】
文章目录 12.5 stack容器 12.5.1 stack基本概念 12.5.2 stack常用接口 12.5 stack容器 12.5.1 stack基本概念 概念:stack是一种先进后出(Fi ...
- 高并发之并发容器详解
高并发之并发容器详解 一.vector Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口 ...
- C++ STL之 queue和deque用法详解
1.queue队列 1.1 创建queue对象: queue<数据类型,容器类型> q; 数据类型:可以是int.double等基本类型,也可以是自定义的结构体. 容器类型:一般为dequ ...
最新文章
- 步步为营-55-js练习
- 关于CLSCompliant
- 北京大学计算机研究所所长,北大计算机研究所所长郭宗明:探索新机制,释放科研创新能力...
- 形态学图像处理学习笔记
- 主题:Spring注解入门(转载)
- 动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]
- (3.3)HarmonyOS鸿蒙长按事件
- android 键盘 自动消失,android 软键盘 回到键 消失事件 监听
- 转码器ffmpeg安装
- stm32c语言arctan函数,超高速的反正切算法,纯整数运算
- c++做界面_一看就会做系列 SmartLink远程诊断发布需求指南简单版
- html文件系统错误的是,Windows10:文件系统错误2147219196
- AD9在元件库封装库添加LOGO
- Mac OS 终端命令失效
- html 图片导出excel,html静态表格导出到excel
- discuz发帖流程_discuz 帖子模块用到的表及自动发帖函数
- win10自带的删除电脑流氓弹窗软件工具怎么用
- 师傅带徒弟学:Python游戏开发引擎cocos2d-python-关东升-专题视频课程
- 游戏建模师真实状况,入行4K?网上吐槽的是真的吗?
- nmon结果分析工具_使用nmon analyzer 分析指标