queue 和 stack 容器

queue 容器

1. queue 基本概念

**概念:先进先出

队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为

2. queue 常用接口

构造函数:

  • queue<T> que; //queue采用模板类实现,queue对象的默认构造形式
  • queue(const queue &que); //拷贝构造函数

赋值操作:

  • queue& operator=(const queue &que); //重载等号操作符

数据存取:

  • push(elem); //往队尾添加元素
  • pop(); //从队头移除第一个元素
  • back(); //返回最后一个元素
  • front(); //返回第一个元素

大小操作:

  • empty(); //判断堆栈是否为空
  • size(); //返回栈的大小

示例:

#include <queue>  
#include <string>  
class Person  
{  
public:  
    Person(string name, int age)  
    {  
        this->m_Name = name;  
        this->m_Age = age;  
    }  
​  
    string m_Name;  
    int m_Age;  
};  
​  
void test01() {  
​  
    //创建队列  
    queue<Person> q;  
​  
    //准备数据  
    Person p1("唐僧", 30);  
    Person p2("孙悟空", 1000);  
    Person p3("猪八戒", 900);  
    Person p4("沙僧", 800);  
​  
    //向队列中添加元素  入队操作  
    q.push(p1);  
    q.push(p2);  
    q.push(p3);  
    q.push(p4);  
​  
    //队列不提供迭代器,更不支持随机访问   
    while (!q.empty()) {  
        //输出队头元素  
        cout << "队头元素-- 姓名: " << q.front().m_Name   
              << " 年龄: "<< q.front().m_Age << endl;  
          
        cout << "队尾元素-- 姓名: " << q.back().m_Name    
              << " 年龄: " << q.back().m_Age << endl;  
          
        cout << endl;  
        //弹出队头元素  
        q.pop();  
    }  
​  
    cout << "队列大小为:" << q.size() << endl;  
}  
​  
int main() {  
    test01();  
    system("pause");  
    return 0;  
}

3. 优先队列

和队列基本操作相同:

  • top 访问队头元素
  • empty 队列是否为空
  • size 返回队列内元素个数
  • push 插入元素到队尾 (并排序)
  • emplace 原地构造一个元素并插入队列
  • pop 弹出队头元素
  • swap 交换内容

定义:priority_queue<Type, Container, Functional>

头文件:<queue>

Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式。

当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆。

 //升序队列,小顶堆
 priority_queue <int,vector<int>,greater<int> > q;
 //降序队列,大顶堆
 priority_queue <int,vector<int>,less<int> >q;

 //greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)

stack

构造函数:

  • stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式
  • stack(const stack &stk); //拷贝构造函数

赋值操作:

  • stack& operator=(const stack &stk); //重载等号操作符

数据存取:

  • push(elem); //向栈顶添加元素
  • pop(); //从栈顶移除第一个元素
  • top(); //返回栈顶元素

大小操作:

  • empty(); //判断堆栈是否为空
  • size(); //返回栈的大小

示例:

#include <stack>  //栈容器常用接口  
void test01()  
{  
    //创建栈容器 栈容器必须符合先进后出  
    stack<int> s;  
​  
    //向栈中添加元素,叫做 压栈 入栈  
    s.push(10);  
    s.push(20);  
    s.push(30);  
​  
    while (!s.empty()) {  
        //输出栈顶元素  
        cout << "栈顶元素为: " << s.top() << endl;  
        //弹出栈顶元素  
        s.pop();  
    }  
    cout << "栈的大小为:" << s.size() << endl;  
​  
}  
​  
int main() {  
​  
    test01();  
    system("pause");  
    return 0;  
}
posted @   星竹z  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示