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

本文介绍了STL中的三种容器适配器:栈、队列和优先队列。栈的主要操作包括empty(), pop(), push(), size()和top()。队列的操作类似,包括push(), pop(), front(), back(), empty()和size()。优先队列可以通过自定义优先级,其默认行为是优先级高的元素先出队。" 119183604,9895256,使用DFS解决LeetCode 863:二叉树中距离为K的结点,"['算法', '深度优先搜索', '二叉树', 'LeetCode']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

STL中栈的使用

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

#include <stack> 
using namespace std;

      栈的定义方式如下:

stack<int>s1;//元素为 int 型
stack<string>s2;// 元素为string型
stack<node>s3;//元素为自定义型

    栈的操作有:

empty()   栈为空时返回真

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

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

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

        top()       返回栈顶元素

STL中队列的使用

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

    声明:

#include <queue>
using namespace std;

    定义:

queue<int>s1;
queue<string>s2;
queue<node>s3;

   基本操作:

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

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

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

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

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

        size()    返回队列的长度

STL中优先队列的使用

   声明:

#include <queue>
using namespace std;

   普通定义:    

  priority_queue<int>q;//通过操作,按照元素从大到小的顺序出队

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

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

  结构体的声明方式:

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


   基本操作:

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

     pop()      删除队顶元素

     push()    加入一个元素

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

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

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


### C++ STL队列的用法及区别 #### (Stack) 是一种后进先出(LIFO, Last In First Out)的数据结构。在 C++ STL 中,`stack` 是一种适配器容器,基于其他序列容器(如 `vector`, `deque` 或 `list`)。默认情况下,`stack` 使用 `deque` 作为底层容器。 要使用,需包含头文件 `<stack>`: ```cpp #include <stack> ``` 创建并操作的方式如下所示: ```cpp std::stack<int> s; s.push(10); // 向顶添加元素 s.push(20); if (!s.empty()) { std::cout << "Top element is: " << s.top() << '\n'; // 访问顶元素 } s.pop(); // 移除顶元素 ``` #### 队列(Queue) 队列则遵循先进先出(FIFO, First In First Out)的原则。同样地,在 C++ STL 中,`queue` 也是一种适配器容器,默认也采用 `deque` 实现[^1]。 引入必要的头文件: ```cpp #include <queue> ``` 下面展示如何定义以及操控队列对象: ```cpp std::queue<std::string> q; q.push("hello"); // 插入新元素到队尾 q.push("world"); while (!q.empty()) { std::cout << q.front() << ' '; // 输出队首元素 q.pop(); // 删除队首元素 } // 输出结果为:"hello world" ``` 除了基本功能外,还可以利用双端队列 `deque` 来构建更复杂的逻辑,比如循环缓冲区等特殊应用场景下的自定义行为[^2]。 对于两者的主要差异在于它们各自的操作模式——一个是 LIFO 而另一个则是 FIFO;此外就是具体方法上的不同之处,例如访问顶部/前端元素的方法名有所变化(`top()` vs `front()`)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值