// 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 и т.п.
Давайте говорить прямо - стек здесь ни при чем, вам нужно развернуть вектор.
Если уж вы используете стандартную библиотеку, то просто вызовите
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;
}
}
Вы же зачем-то лезете вообще в отрицательные (!) индексы, выходя за границы вектора. Очень нездоровое занятие...
И еще - если вы строите стек на основе вектора, то вершина стека - последний элемент в векторе, но не первый. Потому что если вы делаете вершиной первый элемент - то при любом добавлении-удалении должны будете перемещать все элементы вектора, в то время как если вершина - последний, все делается очень просто и эффективно.
Продвижение своими сайтами как стратегия роста и независимости