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))
,但它仍会提供相同的错误结果。
答案 0 :(得分:0)
有些事情无法按预期发挥作用:
for(auto subset : subsets)
说&#34;给我一个可修改的元素副本。&#34;
将auto
更改为auto&
以接收可修改的参考。
基于范围的for循环旨在用于查看恒定范围的元素。如果修改范围,迭代器将失效。改为使用标准for循环。