基本概念
deque是双端容器,可以有头插头删和尾插删
![](https://img.haomeiwen.com/i16668075/a9d2628f6dc83ad8.png)
如上,列出了和vector的区别,头部插入更有效率,但是vector访问的效率更高
![](https://img.haomeiwen.com/i16668075/095575ed6cf24887.png)
如上,deque底层是有一个中控器,对每段连续空间(叫做缓冲器)做一个地址监控,对首尾预留一部分空间,使得看起来像一片连续空间,所以效率会低一些,但是也是支持随机访问的
构造函数
![](https://img.haomeiwen.com/i16668075/1ecfa36c709f5615.png)
如上,和vector容器类似,支持默认,begin,end区间元素拷贝给自身,支持n重复元素,支持拷贝构造
![](https://img.haomeiwen.com/i16668075/2d4c421548b05f6c.png)
如上,很简单,当然是用索引是我提前剧透了。
![](https://img.haomeiwen.com/i16668075/071b20ed95bfacf0.png)
这里提示下如果我们限制遍历只读不修改,需要给参数加上const,这时我们的迭代器就不能选择普通的iterator而要用const_iterator,其他就是使用begin,end获取指针来判断,然后迭代器解引用来实现遍历
赋值操作
![](https://img.haomeiwen.com/i16668075/7f890d7ce7fe8b43.png)
和vector很类似,所以基本没什么新意,还是调用=,assign方法
![](https://img.haomeiwen.com/i16668075/2304d2ae957e5741.png)
大小操作
![](https://img.haomeiwen.com/i16668075/a576001e83ac808a.png)
这部分还是和vector类似,没啥说的就是跑一圈
![](https://img.haomeiwen.com/i16668075/1692da99c7e72afe.png)
如上,都是简单的调用,感觉没什么可说的
最后deque没有容量的概念,因为他可以无限往里放数据
插入和删除
![](https://img.haomeiwen.com/i16668075/caabbb15e8e7d442.png)
如上,我们这次的插入删除直接分为两段的插入删除和指定位置的插入删除
![](https://img.haomeiwen.com/i16668075/7740a24a32f7829d.png)
如上,简单实现头尾插
![](https://img.haomeiwen.com/i16668075/ae163d660a35c613.png)
如上实现头尾删
![](https://img.haomeiwen.com/i16668075/05d2083c1a4a3f13.png)
如上,不光可以插入指定位置一个元素,还可以插入重复元素以及一段区间
![](https://img.haomeiwen.com/i16668075/d585ca994168447f.png)
如上
数据存取
![](https://img.haomeiwen.com/i16668075/89e08c941acf89ee.png)
如上,相比vector多了2个方法,当然只是用于访问头尾元素,注意begin,end是返回迭代器指针,而这个返回的元素对象
![](https://img.haomeiwen.com/i16668075/bcc2b4889c0a86ef.png)
如上,我们可以按索引访问,at忘写了就这样吧,我们看到也可以通过获得到的元素进行修改
排序
![](https://img.haomeiwen.com/i16668075/89ba94fd195a3118.png)
如上,我们可以使用STL的sort方法对deque区间进行排序,注意不是deque方法,当然也支持vector
![](https://img.haomeiwen.com/i16668075/737a08a2b3eed74b.png)
如上,使用sort要导入algorithm模块,使用sort对区间进行排序,我们因为是头插,逆序后排序变成升序
![](https://img.haomeiwen.com/i16668075/0e6e20a4043f9cf2.png)
视频里没有说怎么逆序,但是我觉得之前讲过rbegin,rend,于是试了试,果然可以实现降序
网友评论