<C++> stack与queue容器概念模型|常用接口汇总

简介: <C++> stack与queue容器概念模型|常用接口汇总

1、stack 容器概念模型

1.1、stack 容器模型图

52ea7f60bff54a44941dd20cdee216d9.png


1.2、stack 基本概念与特点

概念:


stack ,栈(堆栈),是一种先进后出(First In Last Out,FILO)的数据结构,其中一端封闭。


生活中栈的例子有很多,就比如一群人排队进入一个死胡同,先进去的人要想出去就要等后面的人都出去,而最后进来的人可以最先出去。


特点:


只有位于栈顶的元素才可以被外界访问

栈用进入数据称为入栈:push

栈中弹出数据成为出栈:pop

stack 不支持遍历操作

遍历需要在不改变原存储空间的条件下进行

通过每次出栈来访问所有元素的方式不能叫遍历

能够判断容器是否为空和得到元素个数

通过入栈来计数,并不是对出栈计数

2、stack 容器常用接口

接口是栈容器封装的一些方法,可以被外调用,实现不同功能


构造函数:


stack<T>stk;

默认构造,T 采用了模板类的写法,存放数据类型

stack(const stack &stk);

拷贝构造函数

赋值操作:


stack& operator=(const stack &stk);

重载赋值运算符,可直接进行赋值

数据存取:


push(elem);

入栈操作,向栈顶添加元素

pop();

出栈操作,从栈顶移除元素

top();

返回栈顶元素

数量操作:


empty();

判断堆栈是否为空

size();

返回栈的大小

2.1、stack 代码综合使用

包含代码具体使用与运行效果


#include<iostream>
#include<stack>
using namespace std;
int main()
{
  //默认构造创建栈
  stack<int>stk;
  //添加元素
  stk.push(99);
  stk.push(66);
  stk.push(123);
  //查看此时容器大小
  cout <<"栈的大小为:"<< stk.size() << endl;
  //结合接口来查看栈内元素
  while (!stk.empty())
  {
    //访问栈顶元素
    cout << stk.top() << endl;
    //出栈,用于更新栈顶元素
    stk.pop();
  }
  //查看此时容器大小
  cout << "出栈后容器的大小为:" << stk.size() << endl;
  return 0;
}


7e1b418bda614807a67413e092f7b830.png

3、queue 容器概念模型

3.1、queue 容器模型图


dff04f78104d440c96b27579662e28dd.png

3.2、queue 基本概念与特点

概念:


queue,队列,是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。


生活中最典型的例子莫过于隧道了,只允许队尾进入隧道,队首驶出隧道,先进先出且不可逆。


特点:


允许从一端添加元素,另一端删除元素

只有队头和队尾可以被外界访问,因此不支持遍历操作

入队操作:push,出队操作:pop

能够判断容器是否为空和得到元素个数

4、queue 容器常用接口

queue与stack常用接口几乎一致,唯一不同的就是队列的队首和队尾与堆栈的栈顶表示有所不同。


front()接口用来返回队首元素

back() 接口用来返回队尾元素

4.1、queue 代码综合使用

包含代码具体使用与运行效果


//定义队列,含重载相等运算符
class Student
{
public:
  Student(string name, int age)
  {
    this->name = name;
    this->age = age;
  }
  //重载相等关系运算符
  bool operator==(Student& s)
  {
    if (s.name == this->name) {
      if (s.age = this->age)
        return true;
      else
        return false;
    }
    else return false;
  }
  string name;
  int age;
};
void testQueue()
{
  //创建空队列
  queue<Student>Q;
  //准备Student数据
  Student s1("青龙", 888);
  Student s2("白虎", 988);
  Student s3("朱雀", 998);
  Student s4("玄武", 999);
  //入队
  Q.push(s1);
  Q.push(s2);
  Q.push(s3);
  Q.push(s4);
  //查看容器大小
  cout << "出队前队列大小为:" << Q.size() << endl;
  //查看队头队尾元素、出队操作
  while (!Q.empty())
  {
    cout << "队头元素\t姓名:" << Q.front().name << " 寿命:" << Q.front().age << endl;
    cout << "队尾元素\t姓名:" << Q.back().name << " 寿命:" << Q.back().age << endl;
    if (Q.front() == Q.back()) {
      cout << "此时队头和队尾元素相等,出队完毕!" << endl;
    }
    Q.pop();
  }
  //查看容器大小
  cout << "出队后容器大小为:" << Q.size() << endl;
}

c4bef87376014b1e817b0fed682b2e05.png


那么stack和queue容器的整合到此结束了,文章中如有不懂得地方完全可以翻阅我的C++专栏,希望能给大家带来帮助,如果觉得写得好就点赞支持博主吧!


目录
相关文章
|
5天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
57 24
|
7天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
70 6
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
C++构建 GAN 模型:生成器与判别器平衡训练的关键秘籍
生成对抗网络(GAN)是AI领域的明星,尤其在C++中构建时,平衡生成器与判别器的训练尤为关键。本文探讨了GAN的基本架构、训练原理及平衡训练的重要性,提出了包括合理初始化、精心设计损失函数、动态调整学习率、引入正则化技术和监测训练过程在内的五大策略,旨在确保GAN模型在C++环境下的高效、稳定训练,以生成高质量的结果,推动AI技术的发展。
43 10
|
2月前
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
39 1
|
2月前
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
38 1
|
2月前
|
存储 算法 C语言
【C++】C++ STL探索:Priority Queue与仿函数的深入解析(一)
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
|
2月前
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
62 0
|
2月前
|
存储 C++ 容器
C++番外篇——stack、queue的实现及deque的介绍
C++番外篇——stack、queue的实现及deque的介绍
26 0
|
2月前
|
存储 算法 C++
C++入门10——stack与queue的使用
C++入门10——stack与queue的使用
46 0
|
2月前
|
C++
【C++】C++ STL探索:Priority Queue与仿函数的深入解析(三)
【C++】C++ STL探索:Priority Queue与仿函数的深入解析