поменять местами первый и последний элемент в стеке c ++ с использованием stl - PullRequest
0 голосов
/ 25 июня 2018

Я создал учетную запись, чтобы я мог получить некоторую помощь со стеками в STL, мне нужно написать функцию, которая принимает стек в качестве параметра и заменяет первый элемент на последний элемент, я искал на сайте некоторую помощь и нашел одну: "https://stackoverflow.com/a/36188943/9990214", я пытался делать то же самое, но я продолжаю получать эту ошибку: выражение должно иметь постоянное значение с красной линией под" int tmp [sz-1]; ".дойдя до основного, любая помощь будет оценена, имейте в виду, я пытаюсь написать функцию с использованием STL. PS: я пытался ответить с комментарием к человеку, который ответил на вопрос, но это не позволяет мне сделать это, потому что мне нужно 50 репутации.

using namespace std;
void rev(stack<int>&x){
    int sz=x.size(),mytop,mybottom;
    mytop=x.top();
    x.pop();
    int tmp[sz-1],i=0;
    while(!x.empty()){
        mybottom=x.top();
        tmp[i++]=mybottom;
        x.pop();
    } 
    stack<int> returnIt;
    returnIt.push(mybottom);
    for(i=0;i<=sz-3;i++){
        returnIt.push(tmp[i]);
    }
    returnIt.push(mytop);
    while(!returnIt.empty()){
        int tt=returnIt.top();
        x.push(tt);
        returnIt.pop();
    }
}

1 Ответ

0 голосов
/ 25 июня 2018

Причина, по которой вы получаете ошибку, состоит в том, что массивы переменной длины не являются частью стандартного C ++. Это важно для вашего определения tmp:

int tmp[sz-1], i=0; //sz is not known at compile-time, therefore, this is invalid code

Некоторые компиляторы разрешают подобный код, разрешая VLA, но не будучи стандартными, вы должны использовать другое решение. Обычно для таких задач идеально подходит std::vector:

std::vector<int> tmp(sz - 1);
int i = 0;

Это должно скомпилироваться (при условии, что вы #include<vector> вместе с другими включенными вами), и должно иметь поведение, ожидаемое от вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...