[转]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>=
[转]STL之deque容器详解的更多相关文章
- 2.4 C++STL deque容器详解
		文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ... 
- 跟我一起学STL(2)——vector容器详解
		一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ... 
- STL:deque用法详解
		deque函数: deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素.但它又与vector不同,deque支持高效插入和 ... 
- STL之deque用法详解
		C++ Deque(双向队列): Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用 ... 
- STL之vector容器详解
		vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ... 
- [转]STL之vector容器详解
		vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ... 
- [转]STL之list容器详解
		List 容器 list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容 ... 
- 2.8 C++STL set/multiset容器详解
		文章目录 2.8.1 引入 2.8.2 代码示例 2.8.3 代码运行结果 2.8.4 对组pair的补充 代码实例 运行结果 总结 2.8.1 引入 set/multiset容器概念 set和mul ... 
- 2.9 C++STL map/multimap容器详解
		文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ... 
随机推荐
- HDU 1254 条件过程复杂的寻找最短路
			这里一看就是找箱子到终点的最短路 一开始还傻傻的以为人的位置给的很没有意思- -,然后果然错了 没过多久想明白了错误,因为你推箱子并不是你想去哪里推就能去哪推的,首先得考虑人能否过的去,因为可能人被箱 ... 
- [luoguP3203][HNOI2010]BOUNCE 弹飞绵羊(LCT)
			传送门 每个点都会跳到另一个点,连边就是一棵树. 更改弹力就是换边. 求一个点跳多少次跳到终点就是求这个点的深度,那么只需要维护 size 域,access(n + 1) 然后 splay(x),求 ... 
- 总结for循环及for循环增强遍历数组,list,set和map
			一.对于集合 (1)普通for循环 int[] arr = { 2, 1, 2 }; for(int i=0;i<arr.length;i++){ System.out.println(arr[ ... 
- 【触发器】MySQL触发器使用详解
			MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 创建触发器在MySQL中,创建触发器语法如下: ... 
- oracle中的类似BIN$MrkCYT9eTTK+0sStMwn7+Q==$0的表的作用
			https://www.2cto.com/database/201211/166482.html https://docs.oracle.com/cd/E11882_01/server.112/e40 ... 
- LVS 源代码分析
			http://blog.chinaunix.net/uid/11207493.html http://zh.linuxvirtualserver.org/blog/3309 
- Linux下C++访问MySQL数据库
			由于想要开始了解并学习用LAMP进行web开发,所以昨晚我在Fedora上安装了MySQL,学习了MySQL的几个常用命令.想着在学习进行web开发(PHP访问数据库)之前,先用我熟悉的C++连接数据 ... 
- jquery注冊文本框获取焦点清空,失去焦点赋值
			在我们开发过程中特别是用户注冊时会有一个效果.就是文本框获取焦点清空提示,假设用户没有输入信息失去焦点赋值上我们的提示语 <html> <head> <meta http ... 
- jsoncpp的生成和使用
			从github下载jsoncpp-master 在执行\jsoncpp-master\makefiles\msvc2010文件夹下jsoncpp.sln 会有3个项目 执行lib_json项目生成li ... 
- 1159--Palindrome(dp:回文串变形2)
			Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 53431 Accepted: 18454 Desc ... 
