Разворто стека (дно сделать вершиной и наоборот) [закрыт]

147
03 ноября 2019, 19:50
// Example program
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n;
    cin >> n; // elements number
    vector <int> stack(n);
    for (int i = (n - 1); i > -1; i--) {
        cin >> stack[i]; //creating stack
    }
    cout << "Stack is:";
    for (int i = 0; i < n; i++) {
        cout << stack[i] << " ";
        }
    cout << endl;
    // showing stack
    // and now i started work
// здесь я завершил работу по созданию стака
    int a;
// начинаю проверку на четность и нечетность, чтобы уяснить будет эле
    if ((n % 2) == 0) {
        a = n;
        }
    else {
        a = n - 1;
        }
    for (int i = 0; i < (a / 2); i++) {
        int temp;
        temp = stack[i];
        stack[i] = stack[ -(i + 1) ];
        stack[-(i + 1)] = temp;
        }
    cout << "reversed one is: ";
    for (int i = 0; i < n; i++) {
        cout << stack[i] << " ";
        }
    return 0;
}

Не работает почему-то. Хотел поменять 0 элемент с -1, 1 с -2, 2 с -3 и т.п.

Answer 1

Давайте говорить прямо - стек здесь ни при чем, вам нужно развернуть вектор.

Если уж вы используете стандартную библиотеку, то просто вызовите

reverse(stack.begin(),stack.end());

Если это категорически запрещено - напишите свой вариант, типа

void reverse(vector<int>& v)
{
    size_t first = 0, last = v.size();
    while ((first != last) && (first != --last)) 
    {
        int tmp = v[first];
        v[first] = v[last];
        v[last] = tmp;
        ++first;
    }
}

Вы же зачем-то лезете вообще в отрицательные (!) индексы, выходя за границы вектора. Очень нездоровое занятие...

И еще - если вы строите стек на основе вектора, то вершина стека - последний элемент в векторе, но не первый. Потому что если вы делаете вершиной первый элемент - то при любом добавлении-удалении должны будете перемещать все элементы вектора, в то время как если вершина - последний, все делается очень просто и эффективно.

READ ALSO
Подскажите почему это так не работает [закрыт]

Подскажите почему это так не работает [закрыт]

Я новичок и должен разобратся в массивах более детальноСмотрел на многие варианты, остановился на этом

185
Перевод String в double и наоборот

Перевод String в double и наоборот

Есть строчный массив, нужно с него получить значение и перевести его в double вот так: "12s" = 1

185
Параметризированные типы и мой пример

Параметризированные типы и мой пример

Я не пойму почему при вызове метода print куда мы ложим sArray строковый массив, когда в самом методе указано, что он будет принимать Integer массив,...

153