文章参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难



一、stack容器

1.1 stack 基本概念

stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

  • 栈中进入数据称为 — 入栈 push
  • 栈中弹出数据称为 — 出栈 pop

在这里插入图片描述
另外,使用 vector 要求添加头文件 #include<stack>。


1.2 stack 常用接口

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

// 赋值操作
stack& operator=(const stack &stk);           , 重载等号操作符

// 数据存取
push(elem);                                   , 向栈顶添加元素
pop();                                        , 从栈顶移除第一个元素
top();                                        , 返回栈顶元素

// 大小操作
empty();                                      , 判断堆栈是否为空
size();                                       , 返回栈的大小

示例代码:

#include<string>
#include<iostream>
#include<stack>

using namespace std;

int main() {
	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; // 输出:false
    cout << "栈的大小:" << stk.size() << endl; // 输出:3

    // 4. 数据存取:top()获取栈顶元素
    cout << "栈顶元素:" << stk.top() << endl; // 输出:30
    stk.top() = 300; // 修改栈顶元素 → 栈内:300 → 20 → 10

    // 5. 数据存取:pop()删除栈顶元素(无返回值)
    stk.pop(); // 删除300 → 栈内:20 → 10
    cout << "pop后栈顶元素:" << stk.top() << endl; // 输出:20

    // 6. 拷贝构造 & 赋值操作
    stack<int> stk2(stk); // 拷贝构造 → stk2: 20 → 10
    stack<int> stk3;
    stk3 = stk2; // 重载等号 → stk3: 20 → 10

    // 循环清空栈(先判断非空)
    while (!stk.empty()) {
        cout << "删除栈顶:" << stk.top() << endl; // 依次输出20、10
        stk.pop();
    }
    cout << "清空后栈大小:" << stk.size() << endl; // 输出:0

	return 0;
}

注: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(const queue &que);                      , 拷贝构造函数

// 赋值操作
queue& operator=(const queue &que);           , 重载等号操作符

// 数据存取
push(elem);                                   , 往队尾添加元素
pop();                                        , 从队头移除第一个元素
back();                                       , 返回最后一个元素
front();                                      , 返回第一个元素

// 大小操作
empty();                                      , 判断队列是否为空
size();                                       , 返回队列的大小

示例代码:

#include <queue>
#include <iostream>
using namespace std;

int main() {
    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/false
    cout << "队列是否为空:" << que.empty() << endl; // 输出:false
    cout << "队列大小:" << que.size() << endl;      // 输出:3

    // 4. 数据存取:front()队头 / back()队尾
    cout << "队头元素:" << que.front() << endl; // 输出:10
    cout << "队尾元素:" << que.back() << endl;   // 输出:30
    que.back() = 300; // 修改队尾元素 → 队列:10→20→300

    // 5. 数据存取:pop()删除队头(无返回值)
    que.pop(); // 删除10 → 队列:20→300
    cout << "pop后队头:" << que.front() << endl; // 输出:20

    // 6. 拷贝构造 & 赋值操作
    queue<int> que2(que); // 拷贝构造 → que2:20→300
    queue<int> que3;
    que3 = que2; // 重载等号 → que3:20→300

    // 循环清空队列(先判断非空)
    while (!que.empty()) {
        cout << "删除队头:" << que.front() << endl; // 依次输出20、300
        que.pop();
    }
    cout << "清空后队列大小:" << que.size() << endl; // 输出:0

    return 0;
}

更多推荐