<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++专栏,希望能给大家带来帮助,如果觉得写得好就点赞支持博主吧!


目录
相关文章
|
2月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
53 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
2月前
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
35 1
|
2月前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
2月前
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
38 1
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
59 2
|
2月前
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
59 0
|
2月前
|
存储 C++ 容器
C++番外篇——stack、queue的实现及deque的介绍
C++番外篇——stack、queue的实现及deque的介绍
25 0
|
2月前
|
存储 算法 C++
C++入门10——stack与queue的使用
C++入门10——stack与queue的使用
42 0
|
21天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
69 2
|
12天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
42 5