stack容器 栈容器与队列容器queue ;array

介绍

  1. stack在头文件stack头文件中使用,也是个适配器,它给底层类(默认情况下为vector)提供典型的栈接口。
  2. stack不仅不允许随机访问栈元素,甚至不允许遍历栈。
  3. stack使用限制在定义栈的基本操作,即可以将压入推到栈顶,从栈顶弹出元素,查看栈顶的值,检查元素数目和测试栈是否为空。栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为
    栈中进入数据称为 — 入栈 push
    栈中弹出数据称为 — 出栈 pop
    top永远指向栈顶元素
  4. stack是一种先进后出的数据结构,它只有一个出口,没有迭代器。

在这里插入图片描述

在这里插入图片描述
注:与queue相似,如果要使用栈中的值,必须首先使用top()l来检索这个值,然后使用pop()将它从栈中删除。

stack常用接口

功能描述:栈容器常用的对外接口

构造函数:

  1. stack stk; //stack采用模板类实现, stack对象的默认构造形式
  2. stack stk; //stack采用模板类实现, stack对象的默认构造形式

赋值操作:

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

数据存储:

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

**大小操作:**

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


#include<iostream>
#include<stack>
using namespace std;

//栈容器常用接口
void test01()
{
    // 创建栈容器 栈容器必须符合先进后出
    stack<int> s;
    //向栈中添加源 叫 压栈 入栈
    s.push(10);
    s.push(20);
    s.push(30);
    if(s.empty())
    {
            cout<<"栈为空"<<endl;
    }else
    {
           cout<<"栈容器非空"<<endl;
           cout<<"size = "<<s.size()<<endl;
    }
     while(!s.empty())//非空 返回false
    {
        cout<<s.top()<<endl;
            //出栈
            s.pop();
    }
}

int main()
{
            test01();
            return 0;
}

在这里插入图片描述
总结:

  1. 入栈 — push
    2.入栈 — push
  2. 返回栈顶 — top
  3. 判断栈是否为空 — empty
  4. 返回栈大小 — size

queue容器

介绍
  1. queue模板类在头文件queue中使用,是个适配器。ostream_iterator模板是个适配器,让输出流能够使用迭代器接口,同样,queue模板让底层类(默认为deque)展示典型的队列接口
  2. queue不仅不允许随机访问队列元素,甚至不允许遍历队列;队列容器允许从一端新增元素,从另一端移除元素;队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为;队列中进数据称为 — 入队 push;队列中出数据称为 — 出队 pop
  3. 它把使用限制在定义队列的基本操作上,可以将元素添加到队尾,从队首删除元素,查看队首和队尾的值,检查元素数目和测试队列释放为空。
  4. queue是一种先进先出的数据结构,有两个出口。
    在这里插入图片描述

在这里插入图片描述
注:pop()是个删除数据的方法,而不是检索数据的方法。如果要使用队列中的值,应首先使用front()来检索这个值,然后使用pop()将从队列中删除。

queue常用接口

功能描述:栈容器常用的对外接口

构造函数:

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

赋值操作:

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

数据存取:

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

大小操作:

  1. empty(); //判断堆栈是否为空
  2. size(); //返回栈的大小
#include<iostream>
#include<queue>
#include<string>
using namespace std;
class Person
{
public:
    string m_name;
    int m_age;
public:
    Person(string name, int age)
    {
        this->m_name = name;
        this->m_age = age;
    }
};

void test01()
{
    //创建队列
    queue<Person> q;

    //准备数据
    Person p1("小华", 30);
    Person p2("小明", 1000);
    Person p3("Tom", 900);
    Person p4("lucy", 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();
    return 0;
}

在这里插入图片描述
总结:

  1. 入队 — push
  2. 出队 — pop
  3. 返回队头元素 — front
  4. 返回队尾元素 — back
  5. 判断队是否为空 — empty
  6. 返回队列大小 — size
priority_queue
  1. priority_queue模板类在queue头文件中声明,操作与queue相同。
  2. priorty_queue与queue区别在于,priority_queue中,最大的元素被移到队首。内部区别在于,默认的底层类是vector。
  3. 可以修改用于确定那个元素放到队首的比较方式,提供了可选的构造参数:priorty_queuepq1;//默认版本; priority_queuepq2(greater);//使用greater顺序
array(c++11)

array并非STL容器,因为其长度是固定的,因此,array没有固定定义调整容器大小的操作,如push_back()和insert(),但定义了对它来说有意义的成员函数,如operator和at()。可将很多标准STL算法用于array对象,如copy()和for_each()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值