📜  如何在 C++ STL 中使用列表实现堆栈(1)

📅  最后修改于: 2023-12-03 15:24:08.062000             🧑  作者: Mango

如何在 C++ STL 中使用列表实现堆栈

在 C++ 中,STL(Standard Template Library,标准模板库)是一个十分强大的工具,它提供了许多容器,可以帮助我们快速实现各种数据结构,其中就包括堆栈(Stack)。

堆栈是一种线性数据结构,具有“先进后出”的特点,也就是说我们只能在栈顶进行插入和删除操作,因此在实现堆栈时可以采用列表(List)来作为底层容器。

实现堆栈
头文件引入

首先我们需要引入两个头文件,一个是 <stack>,另一个是 <list>

#include <stack>
#include <list>
定义堆栈

在 C++ STL 中,我们可以使用模板类 std::stack 来实现堆栈,其中需要指定底层容器的类型。

std::stack<int, std::list<int>> myStack;

上述定义了一个整型堆栈,底层容器类型为 std::list<int>

入栈

我们可以使用 push() 函数将元素压入堆栈中。

myStack.push(1);
myStack.push(2);
myStack.push(3);

上述代码依次将整数 1,2,3 压入堆栈中。

访问栈顶元素

我们可以使用 top() 函数来访问栈顶元素,但是需要在访问之前先判断堆栈是否为空。

if (!myStack.empty()) {
    int topElement = myStack.top();
    std::cout << "Top element: " << topElement << std::endl;
}

上述代码先判断了堆栈是否为空,如果不为空则访问栈顶元素并输出其值。

出栈

我们可以使用 pop() 函数将栈顶元素弹出堆栈。

if (!myStack.empty()) {
    myStack.pop();
}

上述代码先判断了堆栈是否为空,如果不为空则弹出栈顶元素。

判断堆栈是否为空

我们可以使用 empty() 函数来判断堆栈是否为空。

if (myStack.empty()) {
    std::cout << "Stack is empty." << std::endl;
}
获取堆栈大小

我们可以使用 size() 函数来获取堆栈的大小。

std::cout << "Stack size: " << myStack.size() << std::endl;
完整代码示例

下面是一个完整的使用列表实现堆栈的代码示例。

#include <iostream>
#include <stack>
#include <list>

int main() {
    std::stack<int, std::list<int>> myStack;

    myStack.push(1);
    myStack.push(2);
    myStack.push(3);

    if (!myStack.empty()) {
        int topElement = myStack.top();
        std::cout << "Top element: " << topElement << std::endl;
    }

    if (!myStack.empty()) {
        myStack.pop();
    }

    if (myStack.empty()) {
        std::cout << "Stack is empty." << std::endl;
    }

    std::cout << "Stack size: " << myStack.size() << std::endl;

    return 0;
}
总结

使用 C++ STL 中的列表实现堆栈可以大大简化代码的编写,使堆栈的操作更加安全和高效。我们可以使用 std::stack 类来定义堆栈,并使用 std::list 类型的对象来作为底层容器,然后通过 push()pop()top()empty()size() 等函数来实现对堆栈的操作。