我想找到一组数字的幂集,但是我无法使用代码解决一些问题。我应该进行哪些更改?
vector<vector <int>> subsets={{}};
for(int i=0; i<a.size();i++){
int elem = a[i];
for(int j=0;j<subsets.size();j++){
vector<int> prev = subsets[j];
vector<int> n = prev;
n.push_back(elem);
subsets.push_back(n);
}
}
我收到以下错误: “”在抛出'std :: bad_alloc'实例后调用终止方法“”
答案 0 :(得分:4)
如comment中所述:
引发[您的代码包含一个] 无限循环。你在打电话
subsets.push_back
在循环内,因此subsets.size
在以下位置增加 循环的每次迭代都无法停止,直到出现异常 由于内存不足而致电。
异常std::bad_alloc
的原因是该进程试图分配一个太大的内存块(由OS认为)-有很多解决方法,但这不是这里的问题,问题是已经指出的无限循环。
为避免该特定问题,您可以改为使用基于范围的for循环(并避免在循环中使用push_back
),例如:
for(vector<int> prev : subsets){
//do stuff...
}
答案 1 :(得分:1)
请记住,每次迭代都会对循环条件进行完整的评估。
您正在循环内扩展subsets
,因此j
将始终小于subsets.size()
。
这意味着循环将永远不会终止-至少直到内存用完或遇到其他“外部”问题时才会终止。
在循环之前保存限制:
const int limit = subsets.size();
for(int j = 0; j < limit; j++){
//...