【发布时间】:2015-04-15 19:23:21
【问题描述】:
我编写了一个非常简单的程序,但是当我尝试写入队列的大小(使用 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;
}
【问题讨论】:
-
当
que为空时,que.front() <= cut会是什么?看来您假设它是错误的。回顾这个假设。要么这样,要么您打算将该条件放入if而不是while。 -
也是一个样式问题——如果你知道你想遍历向量的所有元素,那么使用单独的变量来保存条目的数量。相反,请使用
vector::size()函数。我说的是您在第二个for循环中使用的n变量——此时不需要它。我知道现在的程序很简单,但是使用向量告诉你它的大小是你应该养成的习惯。 -
@PaulMcKenzie - 我以后会考虑的!谢谢!
标签: c++ segmentation-fault queue iostream cout