意外的分割错误

Unexpected segmentation error

我写了一个非常简单的程序,但是当我尝试写入队列的大小时(使用 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() 会崩溃。