这个自动循环发生了什么

what happened in this auto loop?

本文关键字:发生了 什么 循环      更新时间:2023-10-16
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)),但它仍然给出了相同的不正确的结果。

有一些事情不会像预期的那样工作:

for(auto subset : subsets)表示"给我一个元素的可修改副本。"将auto更改为auto&以接收可修改的引用

基于范围的for循环用于查看元素的常量范围。如果修改了范围,迭代器将失效。使用标准的for循环。