STL学习笔记3--deque
看这一节,是为了下一节的使用,在ogre3d里有些操作要使用到deque。
C++ Deque(双向队列) 的使用
Deque结合了vector 和list 优缺点,是一种使用简单的容器。
deque 的特点:
(1) 随机访问方便,即支持[ ] 操作符和vector.at() ,但性能没有vector 好;
(2) 可以在内部进行插入和删除操作,但性能不及list ;
(3) 可以在两端进行push 、pop ;
(4) 相对于verctor 占用更多的内存。
常用的函数和list的基本相同,除了个别的几个,如
1、 创建一个新双向队列 ,构造函数很多
1 deque();//创建一个空双向队列 2 deque( size_type size );// 创建一个大小为size的双向队列 3 deque( size_type num, const TYPE &val ); //放置num个val的拷贝到队列中 4 deque( const deque &from );// 从from创建一个内容一样的双向队列 5 deque( input_iterator start, input_iterator end ); // start 和 end - 创建一个队列,保存从start到end的元素。
2、Operators 比较和赋值双向队列
//可以使用[]操作符访问双向队列中单个的元素,代码如下
1 deque <int> dequeTest; 2 deque <int>::iterator it; 3 deque <int> dequeTest2; 4 for (int i=0;i<10;i++) 5 { 6 dequeTest.push_back(i); 7 dequeTest2.push_back(10+i); 8 } 9 10 cout<<dequeTest[9]<<endl;//使用[]直接操作元素获取最后一个元素 11 cout<<dequeTest.back()<<endl;//获取最后一个元素
3、链表操作
max_size() 返回双向队列能容纳的最大元素个数
pop_back() 删除尾部的元素
pop_front() 删除头部的元素
push_back() 在尾部加入一个元素
push_front() 在头部加入一个元素
具体代码在最后面,很简单,我这里就不多解释了。
看完标准容器,我们总结一下三者的优缺点
vector 是一段连续的内存块,而deque 是多个连续的内存块, list 是所有数据元素分开保存,可以是任何两个元素没有连续。 vector 的查询性能最好,并且在末端增加数据也很好,除非它重新申请内存段;适合高效地随机存储。
list 是一个链表,任何一个元素都可以是不连续的,但它都有两个指向上一元素和下一元素的指针。所以它对插入、删除元素性能是最好的,而查询性能非常差;适合大量地插入和删除操作而不关心随机存取的需求。
deque 是介于两者之间,它兼顾了数组和链表的优点,它是分块的链表和多个数组的联合。所以它有被list好的查询性能,有被vector好的插入、删除性能。 如果你需要随即存取又关心两端数据的插入和删除,那么deque是最佳之选。
deque代码:
1 #include "deque" 2 #include "iostream" 3 using namespace std; 4 int main() 5 { 6 deque <int> dequeTest; 7 deque <int>::iterator it; 8 deque <int> dequeTest2; 9 for (int i=0;i<10;i++) 10 { 11 dequeTest.push_back(i); 12 dequeTest2.push_back(10+i); 13 } 14 15 cout<<dequeTest[9]<<endl;//获取最后一个元素 16 cout<<dequeTest.back()<<endl;//获取最后一个元素 17 18 it = dequeTest.end(); 19 cout<<dequeTest.size()<<endl;//元素个数 20 cout<<dequeTest.back()<<endl;//获取最后一个元素 21 cout<<dequeTest.front()<<endl;//获取最后一个元素 22 cout<<dequeTest.max_size()<<endl;//最大容量 23 24 for (int i=0;i<dequeTest.size();i++) 25 { 26 cout<<dequeTest.at(i)<<"\t"; 27 } 28 cout<<"*****************"<<endl; 29 swap(dequeTest,dequeTest2);//交换两个队列元素 30 for (int i=0;i<dequeTest.size();i++) 31 { 32 cout<<dequeTest.at(i)<<"\t"; 33 } 34 35 dequeTest.clear();//清空 36 if (dequeTest.empty()) 37 { 38 cout<<"dequeTest is empty"<<endl; 39 } 40 getchar(); 41 getchar(); 42 return 0; 43 }
本文来自博客园,作者:struggle_time,转载请注明原文链接:https://www.cnblogs.com/songliquan/p/3315951.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?