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