在这段代码中,我在尝试将堆栈引用传递给 transferStacks() 方法时遇到了段错误。任何有助于理解为什么会这样的帮助!
我可以去掉辅助方法,它应该可以工作,但我试图从概念上理解。
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
void transferStacks(stack<int> & s1, stack<int> & s2){
if (s1.empty()){
for (int i = 0; i < s2.size(); i++){
int element = s2.top();
s1.push(element);
s2.pop();
}
}
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int queries = 0;
cin>>queries;
stack <int> newestOnTop;
stack <int> oldestOnTop;
while (queries!=0){
int type = 0;
cin >> type;
int input = 0;
if (type == 1){ //enqueue
cin>>input;
newestOnTop.push(input);
}
else if (type == 2){ //dequeue
transferStacks(newestOnTop, oldestOnTop);
oldestOnTop.pop();
}
else if (type == 3){ //peek
transferStacks(newestOnTop, oldestOnTop);
cout<<oldestOnTop.top()<<endl;
}
queries--;
}
return 0;
}
段错误
最佳答案
您似乎相信此代码会将 s2
复制到 s1
:
for (int i = 0; i < s2.size(); i++){
int element = s2.top();
s1.push(element);
s2.pop();
}
但它不会:如果在循环之前 s2
包含 3 个元素,则只会复制前 2 个(通常只会复制前半部分)。
此外,您的transfer
函数将从 s2
传输到s1
,但是您 call 它意味着您打算相反:从s1
转移到s2
。当前代码会将 oldestOnTop
留空,这将在您使用 oldestOnTop.top()
或 oldestOnTop.pop()
时导致崩溃。
关于c++ - 段错误将引用作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57129896/