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 {,,,,}; deque<int>::iterator it; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;
c.rbegin()返回指向反向队列的第一个元素的迭代器(即原队列的最后一个元素)
c.rend()返回指向反向队列的最后一个元素的下一个位置(即原队列的第一个元素的前一个位置)
1
deque<int> d {,,,,}; deque<int>::reverse_iterator it; for(it=d.rbegin();it!=d.rend();it++){ cout << *it << " "; } cout << endl;
operator=赋值运算符重载

1
deque<int> d1 {,,,,},d2; d2 = d1; deque<int>::iterator it; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } cout << endl;

c.assign(n,num)将n个num拷贝复制到容器c
c.assign(beg,end)将[beg,end)区间的数据拷贝复制到容器c

1
deque<int> d1 {,,,,},d2; d2.assign(, ); deque<int>::iterator it; cout << "d2.assign(n,num):"; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } d2.assign(d1.begin(), d1.begin()+); cout << "d2.assign(beg,end):"; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } cout << endl;

c.at(pos)返回索引为pos的位置的元素,会执行边界检查,如果越界抛出out_of_range异常
1
deque<int> d {,,,,}; cout << "d.at(pos):" << d.at(); return ;
c.operator[]下标运算符重载
1
deque<int> d {,,,,}; cout << "d[2]:" << d[]; return ;
c.empty()判断c容器是否为空

1
deque<int> d {,,,,}; if(!d.empty()){ cout << "d is not empty!" << endl; }else{ cout << "d is empty!" << endl; } return ;

c.front()返回c容器的第一个元素
c.back()返回c容器的最后一个元素
1
deque<int> d {,,,,}; if(!d.empty()){ cout << "d.front():" << d.front() << endl; cout << "d.back(): " << d.back() << endl; }
c.size()返回c容器中实际拥有的元素个数
1
deque<int> d {,,,,}; cout << "d.size():" << d.size() << endl; return ;
c.max_size()返回c容器可能存放元素的最大数量
1
deque<int> d {,,,,}; cout << "d.max_size():" << d.max_size() << endl; return ;
c.clear()清除c容器中拥有的所有元素

1
deque<int> d {,,,,}; deque<int>::iterator it; cout << "clear before:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.clear(); cout << "clear after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } 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 {,,,,}; deque<int>::iterator it; cout << "insert before:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.insert(d.end(),); d.insert(d.end(), ,); int a[] = {,,,,}; d.insert(d.begin(),a,a+); cout << "insert after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

c.erase(pos)删除pos位置的元素c.erase(beg,end)删除区间为[beg,end)的元素
c.erase(beg,end)删除区间为[beg,end)之间的元素

1
deque<int> d {,,,,}; d.erase(d.begin()); deque<int>::iterator it; cout << "erase(pos) after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.erase(d.begin(), d.begin()+); cout << "erase(beg,end) after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

c.push_back(num)在末尾位置插入元素
c.pop_back()删除末尾位置的元素
c.push_front(num)在开头位置插入元素
c.pop_front()删除开头位置的元素

1
deque<int> d {,,,,}; d.push_back(); deque<int>::iterator it; cout << "push_back(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.pop_back(); cout << "pop_back(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.push_front(); cout << "push_front(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; d.pop_front(); cout << "pop_front(num):" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl; return ;

c.resize(num)从新定义容器的大小

1
deque<int> d {,,,,}; cout << "d.size():" << d.size() << endl; d.resize(d.size()+); cout << "d.resize() after:" << d.size() <<endl; deque<int>::iterator it; cout << "resize() after:" ; for(it=d.begin();it!=d.end();it++){ cout << *it << " "; } cout << endl;

c1.swap(c2)交换容器c1,c2;
swap(c1,c2)同上。

1
deque<int> d1 {,,,,},d2,d3; d1.swap(d2); deque<int>::iterator it; cout << "d1 swap after:" ; for(it=d1.begin();it!=d1.end();it++){ cout << *it << " "; } cout << endl; cout << "d2 swap after:" ; for(it=d2.begin();it!=d2.end();it++){ cout << *it << " "; } cout << endl; swap(d3,d2); cout << "d3 swap after:" ; for(it=d3.begin();it!=d3.end();it++){ cout << *it << " "; } cout << endl;

重载运算符
operator==
operator!=
operator<
operator<=
operator>
operator>=
STL deque用法的更多相关文章
- 浅谈C++ STL deque 容器
浅谈C++ STL deque 容器 本篇随笔简单介绍一下\(C++STL\)中\(deque\)容器的使用方法及常见使用技巧. deque容器的概念 \(deque\)的意义是:双端队列.队列是我们 ...
- STL vector用法介绍
STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...
- STL deque详解
英文原文:http://www.codeproject.com/Articles/5425/An-In-Depth-Study-of-the-STL-Deque-Container 绪言 这篇文章深入 ...
- STL Deque 容器
STL Deque 容器 Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双 端的,而vector是单端的. ...
- STL之deque用法详解
C++ Deque(双向队列): Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用 ...
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...
- STL:deque用法详解
deque函数: deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和 ...
- STL之三:deque用法详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8519812 deque函数: deque容器为一个给定类型的元素进行线性处理,像向量 ...
- STL之deque用法
deque:双端队列 底层是一个双向链表. 常用的有队列的尾部入队.首部出队. 普通队列:queuequeue 模板类的定义在<queue>头文件中.与stack 模板类很相似,queue ...
随机推荐
- Qt5中创建临时的后台线程。
有个需求就是,GUI图形界面在上传文件到服务器的时候,需要用zip命令行打包,因为文件很多的时候,zip命令打包需要计算很长时间,所以把这样计算量大的任务分离到后台线程比较合适,然后任务完成,以信号槽 ...
- 信息列表中的ContentObserver、CONTENT_URI等
1. 注册ContentObserver时Sms.Inbox.CONTENT_URI应改成Sms.CONTENT_URI. getContentResolver().registerContentOb ...
- mac安装thrift
一.安装brew包管理工具 不想Ubuntu自带apt,redhat自带yum,mac是不自带包管理工具的.需要自己安装,最常用的是brew,Homebrew简称brew,OSX上的软件包管理工具,在 ...
- PHP 5.3版本上MS SQL Server的连接配置
折腾了好久,最后终于连接成功了! 注:我使用的的phpStudy. php.ini中配置: ;这是php中带的驱动 extension=php_sqlsrv.dll extension=php_pdo ...
- iOS之ProtocolBuffer搭建
一.环境安装:pb编译器的安装 1.从https://github.com/google/protobuf/releases下载protocolBuffer对应版本编译器包,比如目前的对应的objc最 ...
- 【LeetCode】230. Kth Smallest Element in a BST (2 solutions)
Kth Smallest Element in a BST Given a binary search tree, write a function kthSmallest to find the k ...
- mysql/mariadb基于ssl的主从复制
当mysql/mariadb跨越互联网进行复制时别人可以窃取到mysql/mariadb的复制信息, 这些信息是明文的, 因此存在不安全性, 这里通过ssl对复制的信息进行加密 1. 创建证书中心 在 ...
- HDU 1896 Stones (优先队列)
Stones Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- Fastjson是一个Java语言编写的高性能功能完善的JSON库。
简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...
- 验证时出错。HRESULT = '8000000A'
这本来是在VS2005下创建的一下项目,后来改用VS2010的开发环境,.NET Framework的版本号还是使用2.0, 但每次生成之后都会在解决方式的同级文件夹下产生一个名称乱码的文件夹, 攻克 ...