现在我正试图解决一个有竞争力的编程问题,但每当我试图推到向量(bb(时,它都会给我一个segfault。我试着通过从堆栈切换到向量,并尝试推送一个没有变量的正则整数来解决这个问题,但我运气不好。
#include <bits/stdc++.h>
#include <iostream>
#include <stack>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t, n;
cin >> t;
for(int e = 0; e < t; e++){
cin >> n;
int want = 1, temp;
bool flag = true;
stack<int> mountain;
vector<int> bb;
for(int i = 0; i < n; i++){
cin >> temp;
mountain.push(temp);
}
while(!mountain.empty() || !bb.empty()){
if(mountain.top() == want){
mountain.pop();
want++;
}else if(!bb.empty() && bb.back() == want){
bb.pop_back();
want++;
}else if(mountain.size() > 1){
bb.push_back(mountain.top()); // <-----------------
mountain.pop();
}else{
cout << "Nn";
flag = false;
break;
}
if(flag && want == n + 1) cout << "Yn";
}
}
return 0;
}
如果你需要这个问题的任何上下文,可以在这里找到。
当我编译您的代码并通过gdb
运行它时,我在以下行得到一个segfault:
while(!mountain.empty() || !bb.empty()){
if(mountain.top() == want){ <-------------------
mountain.pop();
want++;
这是因为在while
检查中,要测试bb
或mountain
是否为空才能继续。bb不是空的,山是。然后您尝试调用mountain.top()
,这导致了您的segfault。
这里需要清理一些逻辑。