STL中栈、队列和优先队列的使用

       STL = Standard Template Library,即标准模板库,STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

      其中,容器分为三类:序列式容器,容器适配器和关联式容器。

      这里要说的栈、队列和优先队列属于容器适配器。

STL中栈的使用

       首先,使用c++ STL中的栈要加入头文件stack,并且使用命名空间std,即       

#include  
using namespace std;

      栈的定义方式如下:

stacks1;//元素为 int 型
stacks2;// 元素为string型
stacks3;//元素为自定义型

    栈的操作有:

empty()   栈为空时返回真

        pop()       移除栈顶元素,但不会返回栈顶元素的值

        push(x)     在栈顶增加元素x

        size()      返回栈中元素的数目

        top()       返回栈顶元素

STL中队列的使用

    队列的使用方式类似于栈,

    声明:

#include 
using namespace std;

    定义:

queues1;
queues2;
queues3;

   基本操作:

push(x)  将x加入队列的末端

        pop()     弹出队列的第一个元素,也就是对顶元素,但不返回任何值

        front()   返回队列的第一个元素

        back()   返回队列的最后一个元素

        empty() 当队列为空时,返回true

        size()    返回队列的长度

STL中优先队列的使用

   声明:

#include 
using namespace std;

   普通定义:    

  priority_queueq;//通过操作,按照元素从大到小的顺序出队

   通过自定义优先级的方式定义:

struct cmp
{
        operator bool ()(int x, int y)
           {
                 return x > y; // x小的优先级高
           }
};
priority_queue, cmp>q;//其中,第二个参数为容器类型。第三个参数为比较函数。

  结构体的声明方式:

struct node
{
    int x, y;
    friend bool operator < (node a, node b)
     {
         return a.x > b.x; //结构体中,x小的优先级高
    }
};
priority_queueq;   //在该结构中,y为值, x为优先级。
     //通过自定义operator<操作符来比较元素中的优先级。
     //在重载”<”时,最好不要重载”>”,可能会发生编译错误


   基本操作:

        empty()   如果队列为空返回真

     pop()      删除队顶元素

     push()    加入一个元素

     size()     返回优先队列中拥有的元素个数

     top()      返回优先队列队顶元素

     PS: 在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。


你可能感兴趣的:(STL)