Передача верхнего стекового элемента в первый из второго стека - PullRequest
0 голосов
/ 10 марта 2019

Хорошо, вот моя проблема: я новичок в стеках C ++ и пытаюсь переместить верхний элемент из одного стека в другой. Вот что я придумал:

#include <iostream>
#include <stack>
using namespace std;

void firstRow(stack <int> a,int X){
for(int i=1;i<=X;i++){
    a.push(i);
}
cout<<"Row 1: ";
for(int i=1;i<=X;i++){
    cout<<a.top()<<" ";
    a.pop();
 }
}

void firstTosecond(stack <int> a,stack <int> b,int X){
int k;
k=a.top();
b.push(k);
cout<<"Row 2: ";
while(!b.empty()){
    cout<<b.top()<<" ";
    b.pop();
}

}

int main() {
int X;
stack <int> a;
stack <int> b;
cout<<"Enter a number:";
cin>>X;
firstRow(a,X);
firstTosecond(a,b,X);

return 0;   
}

Но, когда он пытается запустить функцию firstTosecond, он делает дамп ядра. Я до сих пор не понял, почему. Может быть, я недостаточно исследовал стеки или просто не знаю этого предмета, но я застрял в этой части довольно долго.

Если кто-то может мне помочь или дать какие-либо советы по поводу того, что я делаю неправильно, мы будем очень признательны:).

1 Ответ

0 голосов
/ 10 марта 2019

Вы передаете все параметры путем копирования. Поэтому после firstRow(a,X); вызова стек a все еще остается пустым, поскольку функция оперирует своей собственной локальной переменной = параметр, также называемый a. Затем происходит сбой кода, потому что не разрешено вызывать top в пустом стеке. Добавьте ссылки на функции следующим образом: void firstRow(stack <int>& a,int X), void firstTosecond(stack <int>& a,stack <int>& b,int X).

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