将顶部堆栈元素转移到第二个堆栈的第一个

时间:2019-03-10 13:54:22

标签: c++ stack

好,所以这是我的问题:我是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 :(得分:0)

您正在通过副本传递所有参数。因此,在firstRow(a,X);调用之后,堆栈a仍然为空,因为该函数在其自己的局部变量=该参数也称为a上进行操作。然后,代码崩溃,因为不允许在空堆栈上调用top。添加对以下功能的引用:void firstRow(stack <int>& a,int X)void firstTosecond(stack <int>& a,stack <int>& b,int X)