stack queue deque 用法
2016-04-29 23:19
435 查看
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的常用成员函数:
[align=left] [/align]
deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。具体的deque实现可以参考《STL源码剖析》,当然此书中使用的SGI STL与VS2008所使用的PJ STL的实现方法还是有区别的。下面给出了deque的结构图:
由于篇幅问题,deque的实现细节就不再深入了,下面给出deque的使用范例:
[cpp] view
plain copy
//双向队列 deque
//by MoreWindows http://blog.csdn.net/morewindows
#include <deque>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0
deque<int>::iterator pos;
int i;
//使用assign()赋值 assign在计算机中就是赋值的意思
for (i = 0; i < 20; ++i)
ideq[i] = i;
//输出deque
printf("输出deque中数据:\n");
for (i = 0; i < 20; ++i)
printf("%d ", ideq[i]);
putchar('\n');
//在头尾加入新数据
printf("\n在头尾加入新数据...\n");
ideq.push_back(100);
ideq.push_front(i);
//输出deque
printf("\n输出deque中数据:\n");
for (pos = ideq.begin(); pos != ideq.end(); pos++)
printf("%d ", *pos);
putchar('\n');
//查找
const int FINDNUMBER = 19;
printf("\n查找%d\n", FINDNUMBER);
pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
if (pos != ideq.end())
printf("find %d success\n", *pos);
else
printf("find failed\n");
//在头尾删除数据
printf("\n在头尾删除数据...\n");
ideq.pop_back();
ideq.pop_front();
//输出deque
printf("\n输出deque中数据:\n");
for (pos = ideq.begin(); pos != ideq.end(); pos++)
printf("%d ", *pos);
putchar('\n');
return 0;
}
运行结果如下:
另外要注意一点。对于deque和vector来说,尽量少用erase(pos)和erase(beg,end)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。
转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6946811
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的常用成员函数:
[align=left] [/align]
deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因此deque在随机访问和遍历数据会比vector慢。具体的deque实现可以参考《STL源码剖析》,当然此书中使用的SGI STL与VS2008所使用的PJ STL的实现方法还是有区别的。下面给出了deque的结构图:
由于篇幅问题,deque的实现细节就不再深入了,下面给出deque的使用范例:
[cpp] view
plain copy
//双向队列 deque
//by MoreWindows http://blog.csdn.net/morewindows
#include <deque>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
deque<int> ideq(20); //Create a deque ideq with 20 elements of default value 0
deque<int>::iterator pos;
int i;
//使用assign()赋值 assign在计算机中就是赋值的意思
for (i = 0; i < 20; ++i)
ideq[i] = i;
//输出deque
printf("输出deque中数据:\n");
for (i = 0; i < 20; ++i)
printf("%d ", ideq[i]);
putchar('\n');
//在头尾加入新数据
printf("\n在头尾加入新数据...\n");
ideq.push_back(100);
ideq.push_front(i);
//输出deque
printf("\n输出deque中数据:\n");
for (pos = ideq.begin(); pos != ideq.end(); pos++)
printf("%d ", *pos);
putchar('\n');
//查找
const int FINDNUMBER = 19;
printf("\n查找%d\n", FINDNUMBER);
pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
if (pos != ideq.end())
printf("find %d success\n", *pos);
else
printf("find failed\n");
//在头尾删除数据
printf("\n在头尾删除数据...\n");
ideq.pop_back();
ideq.pop_front();
//输出deque
printf("\n输出deque中数据:\n");
for (pos = ideq.begin(); pos != ideq.end(); pos++)
printf("%d ", *pos);
putchar('\n');
return 0;
}
运行结果如下:
另外要注意一点。对于deque和vector来说,尽量少用erase(pos)和erase(beg,end)。因为这在中间删除数据后会导致后面的数据向前移动,从而使效率低下。
转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/6946811
相关文章推荐
- leetcode 60. Permutation Sequence
- IOS学习 绘图 UIBezierPath 绘饼状图
- Android_UI控件:ListView 属性+使用+优化+Header+Footer+单选+多选+全选+setEmptyView (View emptyView)
- 后缀数组 POJ 3581 Sequence
- IOS学习 绘图 UIBezierPath 绘基本图形、样式设置、渲染填充
- FOJ 1914 Funny Positive Sequence
- POJ 1679 The Unique MST(次小生成树)
- leetcode60-Permutation Sequence(求指定位置的排列)
- Percona 工具 pt-query-digest的使用
- HDU 1242 Rescue(BFS+【优先队列】)
- poj 3080 Blue Jeans
- UINavigationItem和UItabBarItem的区别详解
- “UITableView完美平滑滚动”阅读笔记
- hiho 60. Permutation Sequence
- POJ-1679-The Unique MST(次小生成树)
- 【CodeChef-ANUDTQ】Dynamic Trees and Queries【Splay】【DFS序】
- ios 蓝牙4.0开发(CoreBlueTooth)
- 知问前端——工具提示UI
- 远程服务器返回了意外相应:(413) Request Entity Too Large。
- POJ 1679:The Unique MST 次小生成树