Как заменить последний элемент в стеке?

Для замены последнего элемента в стеке в языке программирования C++ можно использовать несколько подходов. Давайте рассмотрим два наиболее распространенных метода.

1. Первый метод основан на обычных операциях pop и push:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;
    myStack.push(1);
    myStack.push(2);
    myStack.push(3);
    
    // Выводим стек до изменения
    std::cout << "Стек до изменения: ";
    while (!myStack.empty()) {
        std::cout << myStack.top() << " ";
        myStack.pop();
    }
    std::cout << std::endl;
    
    // Замена последнего элемента
    myStack.push(4);
    
    // Выводим стек после изменения
    std::cout << "Стек после изменения: ";
    while (!myStack.empty()) {
        std::cout << myStack.top() << " ";
        myStack.pop();
    }
    std::cout << std::endl;
    
    return 0;
}

В этом примере мы создаем объект стека с типом int и наполняем его значениями 1, 2, 3. Затем мы выводим содержимое стека до изменения, заменяем последний элемент на значение 4 и выводим содержимое стека после изменения.

2. Второй метод основан на доступе к элементам по индексу:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;
    myStack.push(1);
    myStack.push(2);
    myStack.push(3);
    
    // Выводим стек до изменения
    std::cout << "Стек до изменения: ";
    std::stack<int> tempStack;
    while (!myStack.empty()) {
        std::cout << myStack.top() << " ";
        myStack.pop();
        tempStack.push(myStack.top());
        myStack.pop();
    }
    std::cout << std::endl;
    
    // Замена последнего элемента
    myStack.push(4);
    
    // Возвращаем элементы из временного стека обратно в исходный
    while (!tempStack.empty()) {
        myStack.push(tempStack.top());
        tempStack.pop();
    }
    
    // Выводим стек после изменения
    std::cout << "Стек после изменения: ";
    while (!myStack.empty()) {
        std::cout << myStack.top() << " ";
        myStack.pop();
    }
    std::cout << std::endl;
    
    return 0;
}

В этом примере мы создаем объект стека с типом int и наполняем его значениями 1, 2, 3. Затем мы выводим содержимое стека до изменения, перемещаем элементы из исходного стека во временный стек, за исключением последнего элемента. После этого мы заменяем последний элемент на значение 4. Затем мы возвращаем элементы из временного стека обратно в исходный, чтобы восстановить стек в правильном порядке. Наконец, мы выводим содержимое стека после изменения.

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