deque 我们一般叫双向队列,因为这个可以在两头操作嘛
前言
在总结之前,我看了deque用法深度解析,一篇文章弄懂deque容器各种操作_在下马农的博客-CSDN博客
总结的真的蛮好感觉,不过我觉得哪个还是适合新学,不适合分享复习(内容太多,
找知识点函数找得太麻烦了),但是写博客只是为了理清楚自己的思路嘛,我也写一写
这俩一定要有吧
#include<deque>
deque<int> v;
一.添加数据
1.v.push_back(19);//尾巴插个19嘛
2.v.push_front(20);//头插个20嘛
3.v.insert(v.begin() + 1, 39);//在起始位置+1处插个39
4.v.insert(v.begin() + 1, 2,39);//在起始位置+1处插2个39
5.v.insert(v.begin() + 1, b , b + 2);//注意b为数组,将b从0~1(2不包含)的元素插到1位置后的
6.v.assign(4, 2);//将4个2替换原有内容
7.v.assign(m.begin(), m.end());//m为另一个容器,将起始迭代器(位置)与最后一个(自己想取的范围最后一个:注意不包括这个)告诉他会将v重置为那些数据
发现没有 , 这个和vector容器相似度几乎高达80%啊! 我都不用打了,看看相同的直接复制过来就行
二.查看数据
(1)int a=v[0];//直接用[ ]加数字找 (前提v[ n ]存在,否则程序崩溃)
(2)int b=v.at(0);//at函数来查看(前提v.at(n)存在,否则程序崩溃)
----->at()与[]有什么区别呢
[]和at()的区别在于[]不检查索引是否有效,而at()在遇到无效索引时会抛出out_of_range异常.
就看要不要接异常了
(3)一些其他函数查看值
v.back(); //返回v的最后一个元素
v.front(); //返回v的第一个元素
三.空间分配
1.v.resize(10); //将v的现有元素个数调至10个,多则删,少则补,其值随机
2.v.resize(10,2); //将v的现有元素个数调至10个,多则删,少则补,其值为2
reverse不是deque的成员哦
四、对deque的一下其他类型操作
1.v.size(); //返回v中元素的个数;
2.//没有v.capacity()的哦;
3.v.clear(); //清空v中的元素
4.v.empty(); //判断v是否为空,空则返回ture,不空则返回false
5.v.pop_back(); //删除v向量的最后一个元素
6.v.pop_froat();//删除头部元素
6.v.swap(b); //b为向量(就是deque开辟的),将v中的元素和b中的元素进行整体性交换
7.v.begin();//返回起始迭代器位置
8.v.end();//返回最后迭代器(没有数据!!!)
9.使用reverse_iterator反向迭代器
(1)v.rend();//返回起始迭代器位置
(2)v.regain();/返回最后迭代器(没有数据!!!)
10.v.erase(v.begin()+1,v.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,删除数据
11.emplace(v.begin(),int value)函数:iterator迭代器指向元素的前边添加一个元素12.emplace_back(int value);//在尾巴插一个嘛
13.emplace_froat(int value);//在头插一个嘛
14.shrink_to_fit()——要求deque减小容量已适应元素个数
15. max_size()——最多能容纳元素个数//就是这个容器的最大能力
不想打了,从其他人哪里偷过来,应该不过分吧
deque中的迭代器包括以下几个,分别为:
deque.begin():指向deque首元素的迭代器
deque.end():指向deque尾元素下一个位置的迭代器
deque.rbegin():指向deque尾元素的反向迭代器,即rbegin()指向尾元素,rbegin-1指向倒 数第二个元素
deque.rend():指向deque头元素前一个位置的反向迭代器,即rend()指向头元素前一个位置 元素,rbegin-1指向第一个元素
deque.cbegin():指向deque首元素的迭代器,与begin()相同,只不过增加了const属性,不 能用于修改元素。
deque.cend():指向deque尾元素下一个位置的迭代器,与end()相同,只不过增加了const 属性,不能用于修改元素。
deque.crbegin():指向deque尾元素的反向迭代器,与rbegin()相同,只不过增加了const属 性,不能用于修改元素。
deque.crend():指向deque头元素前一个位置的反向迭代器,与rend()相同,只不过增加了 const属性,不能用于修改元素。
遍历容器
for (deque<int>::iterator it = v.begin(); it != v.end(); ++it)
{
cout << *it << endl;
}for(deque<int>::reverse_iterator a=v.rbegin();a!=v.rend();++a)
//反向迭代器 reverse_iterator rbegin()指向最后一个元素 rend()指向第一个元素的后一个位置
{
cout<<*a<<" ";//反向输出数据}
return 0;