Стандартная библиотека 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 <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。