Другие языки программирования и технологии

Вопрос по С++. Стек

Помогите написать стек, в который можно вносить значения его элементов.. . После чего нужна функция, которая должна поменять элементы стека местами - задом на перёд.. . Как это реализовать на словах я понимаю, но преобразовать в код - не получается.. . Помогите хотя бы с перестановкой элементов, пробовал через "swap" но потом узнал, что он не приемлемый для стека так как в нем можно работать только с "головой"
как горбатый вариант -- создать второй стек, перегнать элементы из первого стека во второй и подправить указатель на первый стек чтобы указывал на второй...)))
Григорий Риттер
Григорий Риттер
62 670
Лучший ответ
Еще более "горбатый вариант":

#include <ctime>
#include <stack>
#include <cstdlib>
#include <iostream>

using namespace std;

typedef stack<int> stacki;

int last(stacki &s) {
    int n = s.top();
    s.pop();
    if (s.empty()) {
        return n;
    } else {
        int v = last(s);
        s.push(n);
        return v;
    }
}

void srev(stacki &s) {
    if (!s.empty()) {
        int n = last(s);
        srev(s);
        s.push(n);
    }
}

int main() {
    srand(time(0));
    stacki s;
    cout << "put elements:";
    for (int c = 0; c < 10; ++c) {
        int v = rand() % 101 - 50;
        cout << ' ' << v;
        s.push(v);
    }
    cout << "\nreverse";
    srev(s);
    cout << "\npop elements:";
    while (!s.empty()) {
        cout << ' ' << s.top();
        s.pop();
    }
}