[英]Why does the line “subsets.push_back(n);” give me an error in the following code?
我想找到一组数字的幂集,并且有一些我无法用代码弄清楚的问题。 我应该做些什么改变?
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'的实例后终止调用“”
如评论中所述 :
[您的代码包含] 无限循环 。 你正在循环中调用
subsets.push_back
,所以subsets.size
在每次循环迭代时都会增加,并且无法停止,直到由于内存不足而调用异常。
异常std::bad_alloc
被抛出,因为进程正在尝试分配一个太大的内存块(正如操作系统所认为的那样) - 有办法解决这个问题,但这不是问题所在,问题是已经指出的无限循环。
要避免这个特定问题,您可以使用基于范围的for循环(并避免循环中的push_back
),例如:
for(vector<int> prev : subsets){
//do stuff...
}
请记住,在每次迭代时都会完整地评估循环条件。
您正在扩展循环内的subsets
,因此j
将始终小于subsets.size()
。
这意味着循环永远不会终止 - 至少在内存不足或遇到其他“外部”问题之前。
在循环之前保存限制:
const int limit = subsets.size();
for(int j = 0; j < limit; j++){
//...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.