c++ - 为什么 "subsets.push_back(n);"行在以下代码中给我一个错误?

标签 c++

我想找到一组数字的幂集,但有一些问题我无法用代码解决。我应该做哪些改变??

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' 实例后终止调用""

最佳答案

comment 中所述:

[You code contains an] infinite loop. You are calling subsets.push_back inside loop, so subsets.size is increased at every iteration of loop and it cannot be stopped, until exception is called due to lack of memory.

Exception std::bad_alloc 被抛出是因为进程正在尝试分配一个太大内存块(如操作系统所认为的那样)——有办法解决这个问题但是这不是这里的问题,问题是已经指出的无限循环。

为避免该特定问题,您可以改用基于范围的 for 循环(并避免循环内的 push_back),例如:

for(vector<int> prev : subsets){
  //do stuff...
}

关于c++ - 为什么 "subsets.push_back(n);"行在以下代码中给我一个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56130209/

相关文章:

c++ - 如何在 yaml-cpp 中发出带有额外换行符的映射序列

c++ - 是否可以使生成的 doxygen 输出看起来像 msdn 样式文档(可能是 sandcaSTLe 生成的)?

c++ - 在另一个头文件 C++ 中创建一个类的实例

c++ - 没有元组的 Variadics 模板

c++ - Lambda 捕获列表和复制

c++ - 将字符串放入数组指针

c++ - 使用 std::unique_ptr 的 std::unordered_set

c++ - 在结构中自动索引枚举 ID

c++ - DirectX11 D3D11_MAP 的差异

c++ - 当 boost deadline_timer 在超时处理程序中被销毁时会发生什么