Стандартная библиотека C++<stack>

В C++ стандартная библиотека предоставляет множество контейнеров и алгоритмов, помогающих разработчикам писать программы более эффективно.

<stack>Он является частью стандартной библиотеки шаблонов C++ (STL) и реализует структуру данных «последним пришёл — первым вышел» (LIFO). Эта структура данных очень подходит для сценариев, где «последний добавленный элемент удаляется первым».

<stack>Адаптер контейнера предоставляет интерфейс стека, который основан на других контейнерах (таких какdequeилиvector) для реализации. Элементы стека расположены линейно, но операции добавления и удаления разрешены только с одного конца (вершины стека).

Базовые операции

  • push(): Добавляет элемент на вершину стека.
  • pop(): Удаляет верхний элемент стека.
  • top(): Возвращает ссылку на верхний элемент стека, не удаляя его.
  • empty(): Проверяет, пуст ли стек.
  • size(): Возвращает количество элементов в стеке.

Синтаксис

Далее используется<stack>базовый синтаксис:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    // 向栈中添加元素
    s.push(1);
    s.push(2);
    s.push(3);

    // 访问栈顶元素
    std::cout << "Top element is: " << s.top() << std::endl;

    // 移除栈顶元素
    s.pop();
    std::cout << "After popping, top element is: " << s.top() << std::endl;

    // 检查栈是否为空
    if (!s.empty()) {
        std::cout << "Stack is not empty." << std::endl;
    }

    // 打印栈的大小
    std::cout << "Size of stack: " << s.size() << std::endl;

    return 0;
}

Пример

Ниже приведён полный пример использования<stack>, включая результат вывода:

Пример

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    // Добавить элементы в стек
    s.push(10);
    s.push(20);
    s.push(30);

    // Вывести верхний элемент стека
    std::cout << "Верхний элемент: " << s.top() << std::endl; // Вывод: Верхний элемент: 30

    // Удалить верхний элемент стека
    s.pop();
    std::cout << "После извлечения верхний элемент: " << s.top() << std::endl; // Вывод: После извлечения верхний элемент: 20

    // Проверить, пуст ли стек
    if (!s.empty()) {
        std::cout << "Стек не пуст." << std::endl; // Вывод: Стек не пуст.
    }

    // Вывести размер стека
    std::cout << "Размер стека: " << s.size() << std::endl; // Вывод: Размер стека: 2

    // Продолжить удаление элементов
    s.pop();
    s.pop();

    // Проверить, пуст ли стек
    if (s.empty()) {
        std::cout << "Стек пуст." << std::endl; // Вывод: Стек пуст.
    }

    return 0;
}

Результат вывода:

Top element is: 30
After popping, top element is: 20
Stack is not empty.
Size of stack: 2
Stack is empty.

Примечания

  • <stack>Он не предоставляет метода для прямого доступа к элементам стека; к ним можно получить доступ только черезtop()Доступ к верхнему элементу стека.
  • Попытка вызова на пустом стекеtop()илиpop()Приведёт к неопределённому поведению.
  • <stack>Базовым контейнером стека может быть любой последовательный контейнер, поддерживающий итераторы произвольного доступа, напримерvectorилиdeque。
Другие расширения