Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】

本人简介:男
年龄:18
今日留言:亮亮被迫去练科目二啦,定时发布的文章,回来统一给大家三连回复嗷~
Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第1张图片

文章目录

  • 1. stack容器——栈
    • 1.1 基本概念
      • 1.1.1 特点
        • ① 先进后出
        • ② 不能遍历
        • ③ 可以为空,返回元素个数
      • 1.1.2 图解
    • 1.2 函数原型
      • a. 构造函数
      • b. 赋值操作
      • c. 数据存取
      • d. 大小操作
    • 1.3 代码展示
    • 1.4 测试结果
  • 2. queue容器——队列
  • 2.1 基本概念
      • 2.1.1 特点
        • ① 先进先出
      • ② 不能遍历
      • ③ 可以为空,返回元素个数
      • 2.1.2 图解
    • 2.2 函数原型
      • a. 构造函数
      • b. 赋值操作
      • c. 数据存取
      • d. 大小操作
    • 2.3 代码展示
    • 2.4 测试结果
  • 3. 感谢大家支持u ^ _ ^

1. stack容器——栈

大家不妨想一下生活中,当我们往行李箱里放衣服时,是不是先放进去的衣服被压在最下面,最后才能取出来呢,而最后放进去的衣服最先拿出来呢。如果大家这都能理解的话,那恭喜大家,已经领悟到栈的精髓了哈!!具体特点我们接下来开始讲叭~

1.1 基本概念

1.1.1 特点

① 先进后出

  • stack是一种先进后出的数据结构,它只有一个出口

② 不能遍历

  • 栈容器由于只有顶部元素才能被访问,要想访问栈中其他元素,则需要先把底部元素拿走,但一旦把底部元素拿走,栈的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以栈不能进行遍历操作

③ 可以为空,返回元素个数

  • 栈容器可以为空【通过empty函数()接口】
  • 可以通过入栈时来记录元素的个数【通过size()函数接口】

1.1.2 图解

Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第2张图片
Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第3张图片

1.2 函数原型

记得头文件#include

a. 构造函数

  • stack stk; stack采用模板类实现,stack对象的默认构造形式
  • stack(const stack &stk); 拷贝构造函数

b. 赋值操作

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

c. 数据存取

  • push (elem); 向栈顶添加元素
  • pop (); 从栈顶移除第一个元素
  • top (); 返回栈顶元素

d. 大小操作

  • empty(); 判断堆栈是否为空
  • size(); 返回栈的大小

1.3 代码展示

#include
#include
#include
using namespace std;

void text01() {
	//特点:符合先进后出的数据结构
	stack<int> s;
	s.push(10);
	s.push(20);
	s.push(30);
	s.push(40);

	cout << "栈的大小: " << s.size() << endl;

	//只要栈不为空,查看栈顶,并执行出栈操作
	while (!s.empty()) {
		
		//查看栈顶元素
		cout << "栈顶元素为: " << s.top() << endl;
		
		//出栈
		s.pop();
		
		cout << "栈的大小: " << s.size() << endl;
	}
	
}
int main() {
	text01();

	return 0;
}

1.4 测试结果

Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第4张图片

2. queue容器——队列

在已逝的2019-2022的三年,相信大家每天都有对核酸支配的经历。我们不妨回忆一下,我们排队做核酸时,先排队的A是不是最先做完可以走呢。而最后排队的B是不是最后一个做完,最后才能走呐??没错,这就是队列的精髓——先进先出!!!接下来关于队列的故事,我们慢慢讲!

2.1 基本概念

2.1.1 特点

① 先进先出

  • 具有两个出口,先进先出
  • 队尾入队,队头出队
  • 队列容器允许从一端新增元素,从另一端移除元素

② 不能遍历

  • 【原因类似于stack的栈】queue队列容器由于只有队头和队尾元素才能被访问,要想访问队中其他元素,则需要先把队头/队尾元素拿走,但一旦把头/尾元素拿走,队列中的元素就变少了,使容器元素发生改变,而遍历操作不能改变容器中的元素,所以队列不能进行遍历操作

③ 可以为空,返回元素个数

  • 队列容器可以为空【通过empty函数()接口】
  • 可以返回队列的个数【通过size()函数接口】

2.1.2 图解

Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第5张图片
Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第6张图片

2.2 函数原型

记得头文件#include

a. 构造函数

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

b. 赋值操作

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

c. 数据存取

  • push (elem); 向队尾添加元素
  • pop (); 从对头移除第一个元素
  • back(); 返回最后一个元素
  • front (); 返回第一个元素

d. 大小操作

  • empty(); 判断队列是否为空
  • size(); 返回队列的大小

2.3 代码展示

#include
#include
#include
using namespace std;

class Player {
public:
	Player(string name, int age) {
		this->m_name = name;
		this->m_age = age;
	}
public:
	string m_name;
	int m_age;
};
//队列queue
void text01() {
	//创建队列
	queue<Player> q;

	//准备数据
	Player p1("James", 38);
	Player p2("Irving", 30);
	Player p3("Durant", 34);
	Player p4("Rose", 34);
	Player p5("Curry", 34);

	//入队
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);
	q.push(p5);

	cout << "出队前队列大小为: " << q.size() << endl;
	cout << "------------------------------------------" << endl;
	while ( !q.empty() ) {
		//只要队列不为空,查看队头和队尾
		cout << "队头为: ";
		cout << "姓名: " << q.front().m_name << " 年龄为: " << q.front().m_age << endl;
		cout << "队尾为: ";
		cout << "姓名: " << q.back().m_name << " 年龄为: " << q.back().m_age << endl;
		cout << "------------------------------------------" << endl;
		//出队
		q.pop();
	}
	cout << "出队后大小为: " << q.size() << endl;
}

int main() {
	text01();

	return 0;
}

2.4 测试结果

Day11 C++STL入门基础知识八——stack、queue容器 基本概念-常用接口 【全面深度剖析+例题代码展示】_第7张图片

3. 感谢大家支持u ^ _ ^

下一期预告:list容器

你可能感兴趣的:(关于C++那点破事,c++,数据结构,算法,STL容器,stack)