我编写了一个非常简单的程序,但是当我尝试编写队列大小(用STL创建)时,它崩溃了。我不知道为什么,请帮忙。
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, i, x, cut = 0;
queue<int> que;
vector<int> vec;
cin >> n;
for (i = 1; i <= n; i++) {
cin >> x;
vec.push_back(x);
}
sort(vec.begin(), vec.end());
for (i = 0; i < n; i++)
que.push(vec[i]);
while (!que.empty()) {
cout << que.size() << '\n';
cut += que.front();
while (que.front() <= cut)
que.pop();
}
return 0;
}
答案 0 :(得分:2)
您收到错误,因为您在队列为空时调用front
。
只需检查内循环中队列是否为空:
#include <queue>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, i, x, cut = 0;
queue<int> que;
vector<int> vec;
cin >> n;
for (i = 1; i <= n; i++) {
cin >> x;
vec.push_back(x);
}
sort(vec.begin(), vec.end());
for (i = 0; i < n; i++)
que.push(vec[i]);
while (!que.empty()) {
cout << que.size() << '\n';
cut += que.front();
while (!que.empty() && que.front() <= cut )
que.pop();
}
return 0;
}
答案 1 :(得分:0)
您的代码实际上已崩溃:
while (que.front() <= cut)
因为你有一个循环可能对整个队列都是真的。下一行会弹出一个值。在某些时候,您的队列为空,que.front()
将崩溃。