文章参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
文章目录
- 一、stack容器
- 1.1 stack 基本概念
- 1.2 stack 常用接口
- 二、queue容器
- 2.1 queue 基本概念
- 2.2 queue 常用接口
一、stack容器
1.1 stack 基本概念
stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。
栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为
- 栈中进入数据称为 —入栈
push - 栈中弹出数据称为 —出栈
pop
另外,使用 vector 要求添加头文件#include<stack>。
1.2 stack 常用接口
// 构造函数stack<T>stk;,stack采用模板类实现, stack对象的默认构造形式stack(conststack&stk);,拷贝构造函数// 赋值操作stack&operator=(conststack&stk);,重载等号操作符// 数据存取push(elem);,向栈顶添加元素pop();,从栈顶移除第一个元素top();,返回栈顶元素// 大小操作empty();,判断堆栈是否为空size();,返回栈的大小示例代码:
#include<string>#include<iostream>#include<stack>usingnamespacestd;intmain(){system("chcp 65001> nul");// 1. 默认构造stack<int>stk;// 2. 数据存取:push添加栈顶元素stk.push(10);stk.push(20);stk.push(30);// 栈内:30(栈顶)→ 20 → 10(栈底)// 3. 大小操作:empty()/size()cout<<"栈是否为空:"<<boolalpha<<stk.empty()<<endl;// 输出:falsecout<<"栈的大小:"<<stk.size()<<endl;// 输出:3// 4. 数据存取:top()获取栈顶元素cout<<"栈顶元素:"<<stk.top()<<endl;// 输出:30stk.top()=300;// 修改栈顶元素 → 栈内:300 → 20 → 10// 5. 数据存取:pop()删除栈顶元素(无返回值)stk.pop();// 删除300 → 栈内:20 → 10cout<<"pop后栈顶元素:"<<stk.top()<<endl;// 输出:20// 6. 拷贝构造 & 赋值操作stack<int>stk2(stk);// 拷贝构造 → stk2: 20 → 10stack<int>stk3;stk3=stk2;// 重载等号 → stk3: 20 → 10// 循环清空栈(先判断非空)while(!stk.empty()){cout<<"删除栈顶:"<<stk.top()<<endl;// 依次输出20、10stk.pop();}cout<<"清空后栈大小:"<<stk.size()<<endl;// 输出:0return0;}注:boolalpha 是 C++ 标准库中的输出格式控制符,作用是让 cout 输出布尔值(bool 类型)时,显示文本形式(true/false)而非默认的数字形式(1/0)
二、queue容器
2.1 queue 基本概念
Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。
队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。
- 队列中进数据称为 —入队
push - 队列中出数据称为 —出队
pop
另外,使用 vector 要求添加头文件#include<queue>。
2.2 queue 常用接口
// 构造函数queue<T>que;,queue采用模板类实现,queue对象的默认构造形式queue(constqueue&que);,拷贝构造函数// 赋值操作queue&operator=(constqueue&que);,重载等号操作符// 数据存取push(elem);,往队尾添加元素pop();,从队头移除第一个元素back();,返回最后一个元素front();,返回第一个元素// 大小操作empty();,判断队列是否为空size();,返回队列的大小示例代码:
#include<queue>#include<iostream>usingnamespacestd;intmain(){system("chcp 65001> nul");// 1. 默认构造queue<int>que;// 2. 数据存取:push往队尾添加元素que.push(10);que.push(20);que.push(30);// 队列:10(队头)→ 20 → 30(队尾)// 3. 大小操作:empty()/size()cout<<boolalpha;// 布尔值显示true/falsecout<<"队列是否为空:"<<que.empty()<<endl;// 输出:falsecout<<"队列大小:"<<que.size()<<endl;// 输出:3// 4. 数据存取:front()队头 / back()队尾cout<<"队头元素:"<<que.front()<<endl;// 输出:10cout<<"队尾元素:"<<que.back()<<endl;// 输出:30que.back()=300;// 修改队尾元素 → 队列:10→20→300// 5. 数据存取:pop()删除队头(无返回值)que.pop();// 删除10 → 队列:20→300cout<<"pop后队头:"<<que.front()<<endl;// 输出:20// 6. 拷贝构造 & 赋值操作queue<int>que2(que);// 拷贝构造 → que2:20→300queue<int>que3;que3=que2;// 重载等号 → que3:20→300// 循环清空队列(先判断非空)while(!que.empty()){cout<<"删除队头:"<<que.front()<<endl;// 依次输出20、300que.pop();}cout<<"清空后队列大小:"<<que.size()<<endl;// 输出:0return0;}