首页 > 其他分享 >queue 和 stack 容器

queue 和 stack 容器

时间:2024-03-15 17:35:56浏览次数:23  
标签:容器 队列 元素 queue Person push 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;  
}

标签:容器,队列,元素,queue,Person,push,stack
From: https://www.cnblogs.com/xingzhuz/p/18075887

相关文章

  • Elastic Stack基础
    ElasticStack组件介绍ElasticsearchElasticsearch是使用java开发,基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等LogstashLogstash基于java开发,是一个数......
  • deque容器
    deque1.deque容器基本概念功能:双端数组,可以对头端进行插入删除操作头文件:<deque>deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque......
  • list容器
    list1.list基本概念功能:将数据进行链式存储链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一个双向......
  • iOS端创建ReactNative容器第一步:打出jsbundle和资源包
    react-native的打包流程是通过执行react-nativebundle指令进行的。 添加构建指令修改RN项目中的package.json文件,先其中添加构建命令build-release-ios和build-debug-ios"scripts":{"android":"react-nativerun-android","ios":"react-nativerun-ios"......
  • 【C++进阶】C++关联式容器map和set用法详解
    map和set用法详解一,关联式容器二,键值对pair三,set1.set的用法2.multiset的用法四,map1.键值对pair的介绍2.map用法3.multimap用法五,总结上一节我们讲解了二叉搜索树,在讲解之前我们先来讲一下set和map,因为set和map的底层是AVL树和红黑树,而AVL树和红黑树又是一种二......
  • set容器详解
    set 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。set 内部通常采用 红黑树 实现。平衡二叉树 的特性使得 set 非常适合处理需要同时兼顾查找、插入与删除的情况。和数学中的集合相似,set 中不会出现值相同的元素。如果需要有相同元素的集合,......
  • 性能逆天的三端电容器-谈历代iphone电容器的变迁史
    早期苹果手机的硬件设计在业界享有很高的声誉,技术领先,主要体现在以下方面:整合性设计:苹果采用垂直整合的设计理念,掌控硬件和软件的整个生态系统。这种一体化设计使得硬件和软件之间更好地协同工作,提供更流畅、高效的用户体验。高质量的材料和制造工艺:苹果注重采用高质量的材......
  • 数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)
    本期作者前言云原生时代下,Kubernetes已成为容器技术的事实标准, 使得基础设施领域应用下自动化运维管理与编排成为可能。对于无状态服务而言, 业界早已落地数套成熟且较完美的解决方案。可对于有状态的服务, 方案的复杂度就以几何倍数增长, 例如分布式应用多个实例间的依......
  • linux系统对于docker容器的监控
    容器监控容器监控原生命令操作问题容器监控三剑客CAdvisorInfluxDBGranfanacompose编排监控工具新建目录创建CIG.yml文件启动docker-compose测试容器监控CAdvisor+InfluxDB+Granfana原生命令操作dockerstats问题通过dockerstats命令可以很方便的看到当......
  • linux系统创建私有容器仓库和docker容器的资源限制
    私有仓库创建和资源限制创建私有仓库docker资源限制系统压力测试工具stresscpu资源限制限制CPUShare限制CPU核数CPU绑定mem资源限制限制IO创建私有仓库上传harbor压缩包解压下载docker-compose进入解压后的目录修改配置文件mvharbor.yml.tmplharbor.ymlv......