Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

std::stack в C++: полное руководство с практическими примерами

Что такое std::stack?

std::stack — адаптер контейнера, реализующий принцип LIFO (Last In, First Out — последний пришёл, первый ушёл). Он позволяет вставку и удаление элементов только с одного конца — вершины. По умолчанию в качестве базового контейнера используется std::deque, но можно указать любой последовательный контейнер (например, std::vector или std::list).

Адаптеры контейнеров не предоставляют итераторов, поэтому напрямую обойти стек нельзя. Взаимодействие происходит через функции-члены.

Цели обучения

Синтаксис

Подключите заголовочный файл <stack> и объявите стек шаблоном:

template<class T, class Container = std::deque<T>> class stack;

Типы-члены

Основные операции

Обзор реализации

Ниже — визуальное представление операций стека (вершина отмечена стрелкой).
std::stack в C++: полное руководство с практическими примерами

push() и pop()

Метод push() добавляет новый элемент, увеличивая размер на 1:

stack.push(value);

Метод pop() удаляет верхний элемент и уменьшает размер:

stack.pop();

Пример 1: Базовая манипуляция стеком


#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    st.push(10);
    st.push(20);
    st.push(30);
    st.push(40);
    st.pop(); // удаляет 40
    st.pop(); // удаляет 30
    while (!st.empty()) {
        cout << ' ' << st.top();
        st.pop();
    }
    return 0;
}

Вывод: 20 10

empty(), size(), top()

Эти утилиты дают быструю информацию о состоянии стека.

Пример 2: Инспекция состояния стека


#include <iostream>
#include <stack>
using namespace std;
void display(stack<int> s) {
    while (!s.empty()) {
        cout << '\t' << s.top();
        s.pop();
    }
    cout << '\n';
}
int main() {
    stack<int> st;
    st.push(32);
    st.push(21);
    st.push(39);
    st.push(89);
    st.push(25);
    cout << "The stack st is: ";
    display(st);
    cout << "\n st.size() : " << st.size();
    cout << "\n st.top() : " << st.top();
    st.pop();
    cout << "\n st after pop: ";
    display(st);
    return 0;
}

Вывод: показывает содержимое стека, размер, верхний элемент и состояние после pop.

emplace() и swap()

• emplace() конструирует элемент на месте, избегая лишнего копирования.
• swap() эффективно обменивает содержимое двух стеков.

Пример 3: Использование emplace() и swap()


#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st1, st2;
    st1.emplace(12);
    st1.emplace(19);
    st2.emplace(20);
    st2.emplace(23);
    st1.swap(st2);
    cout << "st1 = ";
    while (!st1.empty()) {
        cout << st1.top() << " ";
        st1.pop();
    }
    cout << endl << "st2 = ";
    while (!st2.empty()) {
        cout << st2.top() << " ";
        st2.pop();
    }
}

Вывод: демонстрирует содержимое стеков до и после обмена.

Использование std::stack в STL

Реализовать стек одной строкой:

std::stack<T> st;

Пример:


#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    st.push(12);
    st.push(19);
    st.push(20);
    cout << st.top(); // 20
    cout << st.size(); // 3
    return 0;
}

Резюме

Язык C

  1. Операторы в C++: типы, примеры и практические программы
  2. Цикл do-while в C++: синтаксис, примеры и вложенные циклы
  3. Оператор switch-case в C++: синтаксис, применение и практические примеры
  4. Динамическое выделение массивов в C++: практическое руководство с примерами кода
  5. Указатели в C++: концепции, примеры и практические применения
  6. Перегрузка операторов в C++: практическое руководство с примерами кода
  7. Структуры (struct) в C++: объяснение с практическим примером
  8. std::map в C++: полное руководство с примерами кода
  9. Освоение std::list в C++: синтаксис, функции и практические примеры
  10. Функции в C++: подробное объяснение с практическими примерами кода