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


目录
相关文章
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
C++构建 GAN 模型:生成器与判别器平衡训练的关键秘籍
生成对抗网络(GAN)是AI领域的明星,尤其在C++中构建时,平衡生成器与判别器的训练尤为关键。本文探讨了GAN的基本架构、训练原理及平衡训练的重要性,提出了包括合理初始化、精心设计损失函数、动态调整学习率、引入正则化技术和监测训练过程在内的五大策略,旨在确保GAN模型在C++环境下的高效、稳定训练,以生成高质量的结果,推动AI技术的发展。
49 10
|
28天前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
35 0
|
2月前
|
存储 算法 调度
【C++打怪之路Lv11】-- stack、queue和优先级队列
【C++打怪之路Lv11】-- stack、queue和优先级队列
40 1
|
2月前
|
弹性计算 Kubernetes 网络协议
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
阿里云弹性网络接口技术的容器网络基础教程
|
2月前
|
设计模式 存储 C++
C++之stack 和 queue(下)
C++之stack 和 queue(下)
39 1
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
78 2
|
2月前
|
C++ 容器
C++之stack 和 queue(上)
C++之stack 和 queue(上)
63 0
|
2月前
|
存储 C++ 容器
C++番外篇——stack、queue的实现及deque的介绍
C++番外篇——stack、queue的实现及deque的介绍
31 0
|
2月前
|
存储 算法 C++
C++入门10——stack与queue的使用
C++入门10——stack与queue的使用
46 0
|
26天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
42 2