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


目录
相关文章
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
设计模式 C++ 容器
c++中的Stack与Queue
c++中的Stack与Queue
|
C++ 容器
【c++丨STL】stack和queue的使用及模拟实现
本文介绍了STL中的两个重要容器适配器:栈(stack)和队列(queue)。容器适配器是在已有容器基础上添加新特性或功能的结构,如栈基于顺序表或链表限制操作实现。文章详细讲解了stack和queue的主要成员函数(empty、size、top/front/back、push/pop、swap),并提供了使用示例和模拟实现代码。通过这些内容,读者可以更好地理解这两种数据结构的工作原理及其实现方法。最后,作者鼓励读者点赞支持。 总结:本文深入浅出地讲解了STL中stack和queue的使用方法及其模拟实现,帮助读者掌握这两种容器适配器的特性和应用场景。
373 21
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
229 1
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
222 0
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
|
存储 C++ 容器
C++番外篇——stack、queue的实现及deque的介绍
C++番外篇——stack、queue的实现及deque的介绍
201 0
|
7月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1071 108