stack queue deque 用法

stack 操作

top  a.top获得栈顶元素,当栈为空的时候segmentation fault 


empty  当为空的时候,a.empty()返回1,否则返回0

push

pop

a.size() 可以获得栈的大小

注意 a.pop()的返回值不是弹出的值




queue

push  对于队列,push只能添加到队尾

pop  对于队列,pop 从队首弹出

front

empty 方法 如果为空返回1,否则0

size 方法 返回大小


deque

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数:

 

deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。具体的deque实现可以参考《STL源码剖析》,当然此书中使用的SGI STL与VS2008所使用的PJ STL的实现方法还是有区别的。下面给出了deque的结构图:

 

由于篇幅问题,deque的实现细节就不再深入了,下面给出deque的使用范例:

[cpp]  view plain  copy
  1. //双向队列 deque  
  2. //by MoreWindows http://blog.csdn.net/morewindows  
  3. #include <deque>  
  4. #include <cstdio>  
  5. #include <algorithm>  
  6. using namespace std;  
  7. int main()  
  8. {  
  9.     deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0  
  10.     deque<int>::iterator pos;  
  11.     int i;  
  12.   
  13.     //使用assign()赋值  assign在计算机中就是赋值的意思  
  14.     for (i = 0; i < 20; ++i)  
  15.         ideq[i] = i;  
  16.       
  17.     //输出deque  
  18.     printf("输出deque中数据:\n");  
  19.     for (i = 0; i < 20; ++i)  
  20.         printf("%d ", ideq[i]);  
  21.     putchar('\n');  
  22.   
  23.     //在头尾加入新数据  
  24.     printf("\n在头尾加入新数据...\n");  
  25.     ideq.push_back(100);  
  26.     ideq.push_front(i);  
  27.   
  28.     //输出deque  
  29.     printf("\n输出deque中数据:\n");  
  30.     for (pos = ideq.begin(); pos != ideq.end(); pos++)  
  31.         printf("%d ", *pos);  
  32.     putchar('\n');  
  33.   
  34.     //查找  
  35.     const int FINDNUMBER = 19;  
  36.     printf("\n查找%d\n", FINDNUMBER);  
  37.     pos = find(ideq.begin(), ideq.end(), FINDNUMBER);  
  38.     if (pos != ideq.end())  
  39.         printf("find %d success\n", *pos);  
  40.     else  
  41.         printf("find failed\n");  
  42.   
  43.     //在头尾删除数据  
  44.     printf("\n在头尾删除数据...\n");  
  45.     ideq.pop_back();  
  46.     ideq.pop_front();  
  47.   
  48.     //输出deque  
  49.     printf("\n输出deque中数据:\n");  
  50.     for (pos = ideq.begin(); pos != ideq.end(); pos++)  
  51.         printf("%d ", *pos);  
  52.     putchar('\n');  
  53.     return 0;  
  54. }  

运行结果如下:

另外要注意一点。对于deque和vector来说,尽量少用erase(pos)和erase(beg,end)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。

 

 

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6946811

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值