在这个自动循环中发生了什么?

时间:2015-10-09 20:29:56

标签: c++ c++11 memory-management

vector<int> nums = {1, 2, 3};
vector<vector<int>> subsets = {{}};
for(int i=0; i<3; i++)
    for(auto subset : subsets)
    {
        subset.push_back(nums[i]);
        subsets.push_back(subset);
    }

subsets的内容在运行后原来是:

[[] [1] [2] [2] [3] [3] [3] [3]]

但是,我在期待:

[[] [1] [2] [1 2] [3] [1 3] [2 3] [1 2 3]]

似乎只考虑第一个元素,即空vector<int>

你能否告诉我内存分配究竟发生了什么?

PS:我还将subsets.push_back(subset)更改为subsets.push_back(vector<int>(subset)),但它仍会提供相同的错误结果。

1 个答案:

答案 0 :(得分:0)

有些事情无法按预期发挥作用:

for(auto subset : subsets)说&#34;给我一个可修改的元素副本。&#34; 将auto更改为auto&以接收可修改的参考

基于范围的for循环旨在用于查看恒定范围的元素。如果修改范围,迭代器将失效。改为使用标准for循环。