1、stack
stack 模板类的定义在<stack>头文件中。
stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要
的,在不指定容器类型时,默认的容器类型为deque。
定义stack 对象的示例代码如下:
stack<int> s1;
stack<string> s2;
stack 的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true。
访问栈中的元素个数,如例:s.size()。

2、queue
queue 模板类的定义在<queue>头文件中。
与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
定义queue 对象的示例代码如下:
queue<int> q1;
queue<double> q2;

queue 的基本操作有:
入队,如例:q.push(x); 将x 接到队列的末端。
出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素,如例:q.front(),即最早被压入队列的元素。
访问队尾元素,如例:q.back(),即最后被压入队列的元素。
判断队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()

#include <cstdlib>
#include <iostream>
#include <queue>

using namespace std;

int main()
{
    int e,n,m;
    queue<int> q1;
    for(int i=0;i<10;i++)
       q1.push(i);
    if(!q1.empty())
    cout<<"dui lie  bu kong\n";
    n=q1.size();
    cout<<n<<endl;
    m=q1.back();
    cout<<m<<endl;
    for(int j=0;j<n;j++)
    {
       e=q1.front();
       cout<<e<<" ";
       q1.pop();
    }
    cout<<endl;
    if(q1.empty())
    cout<<"dui lie  bu kong\n";
    system("PAUSE");
    return 0;
}

3、priority_queue
在<queue>头文件中,还定义了另一个非常有用的模板类priority_queue(优先队列)。优先队
列与队列的差别在于优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序
出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)。
priority_queue 模板类有三个模板参数,第一个是元素类型,第二个容器类型,第三个是比
较算子。其中后两个都可以省略,默认容器为vector,默认算子为less,即小的往前排,大
的往后排(出队时序列尾的元素出队)。
定义priority_queue 对象的示例代码如下:
priority_queue<int> q1;
priority_queue< pair<int, int> > q2; // 注意在两个尖括号之间一定要留空格。
priority_queue<int, vector<int>, greater<int> > q3; // 定义小的先出队
priority_queue 的基本操作与queue 相同。
初学者在使用priority_queue 时,最困难的可能就是如何定义比较算子了。
如果是基本数据类型,或已定义了比较运算符的类,可以直接用STL 的less 算子和greater
算子——默认为使用less 算子,即小的往前排,大的先出队。
如果要定义自己的比较算子,方法有多种,这里介绍其中的一种:重载比较运算符。优先队
列试图将两个元素x 和y 代入比较运算符(对less 算子,调用x<y,对greater 算子,调用x>y),
若结果为真,则x 排在y 前面,y 将先于x 出队,反之,则将y 排在x 前面,x 将先出队。
看下面这个简单的示例:
#include <iostream>

#include <queue>
using namespace std;
class T
{
public:
int x, y, z;
T(int a, int b, int c):x(a), y(b), z(c)
{
}
};
bool operator < (const T &t1, const T &t2)
{
return t1.z < t2.z; // 按照z 的顺序来决定t1 和t2 的顺序
}
main()
{
priority_queue<T> q;
q.push(T(4,4,3));
q.push(T(2,2,5));
q.push(T(1,5,4));
q.push(T(3,3,6));
while (!q.empty())
{
T t = q.top(); q.pop();
cout << t.x << " " << t.y << " " << t.z << endl;
}
return 1;
}
输出结果为(注意是按照z 的顺序从大到小出队的):
3 3 6
2 2 5
1 5 4
4 4 3
再看一个按照z 的顺序从小到大出队的例子:
#include <iostream>
#include <queue>
using namespace std;
class T
{
public:
int x, y, z;
T(int a, int b, int c):x(a), y(b), z(c)
{
}
};
bool operator > (const T &t1, const T &t2)
{
return t1.z > t2.z;
}
main()
{
priority_queue<T, vector<T>, greater<T> > q;
q.push(T(4,4,3));
q.push(T(2,2,5));
q.push(T(1,5,4));
q.push(T(3,3,6));
while (!q.empty())
{
T t = q.top(); q.pop();
cout << t.x << " " << t.y << " " << t.z << endl;
}
return 1;
}
输出结果为:
4 4 3
1 5 4
2 2 5
3 3 6
如果我们把第一个例子中的比较运算符重载为:
bool operator < (const T &t1, const T &t2)
{
return t1.z > t2.z; // 按照z 的顺序来决定t1 和t2 的顺序
}
则第一个例子的程序会得到和第二个例子的程序相同的输出结果。

C++ STL--stack/queue 的使用方法相关推荐

  1. C++ STACK Queue

    STL--stack/queue的使用方法 2010-01-05 17:36 stack(栈)和queue(队列)也是在程序设计中经常会用到的数据容器,STL为我们提供了方便的stack(栈)的que ...

  2. Java集合类学习-LinkedList, ArrayList, Stack, Queue, Vector

    Collection List 在Collection的基础上引入了有序的概念,位置精确:允许相同元素.在列表上迭代通常优于索引遍历.特殊的ListIterator迭代器允许元素插入.替换,双向访问, ...

  3. STL stack 容器

    STL stack 容器 Stack简介 stack是堆栈容器,是一种"先进后出"的容器.       stack是简单地装饰deque容器而成为另外的一种容器.       #i ...

  4. programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation

    编程题常用知识点的review. most important: 想好(1)详尽步骤(2)边界特例,再开始写代码. I.vector #include <iostream> //0.头文件 ...

  5. c++ stl stack(FILO,容器配接器)

    1.stack stack是一种先进后出的数据结构,它只有一个出口.stack允许新增元素.移除元素.取得最顶元素.但除了最顶端外,没有任何其他方法可以存取stack的其他元素.换言之,stack不允 ...

  6. js中报错“Maximum call stack size exceeded“解决方法

    js中报错"Maximum call stack size exceeded"解决方法 参考文章: (1)js中报错"Maximum call stack size ex ...

  7. Vs定义超大数组时,stack OverFlow的解决方法

    定义超大数组时,stack OverFlow的解决方法,当然了这里的数组不仅仅是int,char,double等内置类型,还可以是其他的类,如CString,CButton,CMap等. stack ...

  8. C++STL的queue容器

    C++STL的queue容器 queue 基本概念 queue 常用接口 queue 基本概念 概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口 ...

  9. Stack/Queue与Vector/List的联系

    Vector:(顺序表[数组存储]) 1.当申请的空间不足的时候,需要再次开辟一块更大的空间,并把值拷过去. 2.对于尾删和尾插是比较方便的,只需要改动最后一个元素即可.不会改动原有的空间.适用于多次 ...

  10. Python之数据重塑——【stack()方法和unstack()方法、pivot()方法】

    文章目录 重塑层次化索引 对于单层索引的DataFrame类对象 stack()方法 unstack()方法 对于多层索引的DataFrame类对象 辨析操作内层索引与外层索引的区别 查看多层索引对象 ...

最新文章

  1. [partial] C#里partial关键字的作用
  2. charshow技术预研
  3. Double Free浅析(泄露堆地址的一种方法)
  4. Linux使用systemctl设置程序开机自启动
  5. WiFi攻击中的“核武器”长啥样?来,今天咱们开开眼...
  6. Allegro 关闭与显示网络飞线
  7. 文献学习(part80-A)--Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?
  8. c语言函数调用参数调用的太少,浅谈C语言函数调用参数压栈的相关问题
  9. createdroptargets_使用DUILIB建立项目
  10. mysql可重复读和间隙锁_解决MySQL可重复读——详解间隙锁
  11. hashcode值一样对象一定相同吗_你所不知道的HashCode
  12. gitblit如何迁移入gitlab合并迁移_最新gitlab备份迁移方案
  13. Fortran编程:(一)认识Fortran
  14. 荐一个不错的UI设计网站: uimaker
  15. 普通路由器连接光猫一体机的配置教程(以水星MW300R路由器,移动吉比特GS3202光猫一体机为例,可突破专供定制路由限制)
  16. 日志易——中国版的splunk
  17. WinHex的使用指南(图文详细版)
  18. 玩转JS|解放双手,快手一键取消多个关注教程
  19. 基于python的情感分析案例-python自然语言处理情感分析案例
  20. 工业交换机与商用交换机的区别有哪些

热门文章

  1. mysql myisam 支持事务吗_第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)...
  2. 传值类型_java中的“传值”与“传址”问题
  3. python安装sqap_python文件I/O
  4. 泊松分布的分布函数_《可靠性设计》——常用的概率分布
  5. 【LeetCode笔记】312. 戳气球(Java、动态规划)
  6. python写if语句_python if语句
  7. java类验证和装载顺序_Java类加载机制实现流程及原理详解
  8. mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...
  9. mysql 日期类型比价_MySQL 日期时间类型怎么选?
  10. comps电磁场模拟软件_什么样配置的电脑可以适合用于电磁仿真?