我写了一个非常简单的程序,但是当我尝试编写队列的大小(使用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;
}
您
会收到错误,因为在队列为空时调用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;
}
你的代码实际上崩溃了:
while (que.front() <= cut)
因为您有一个可能对整个队列为真的循环。下一行弹出一个值。在某些时候,您的队列是空的,que.front()
会崩溃。