这个自动循环发生了什么
what happened in this auto loop?
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循环。
相关文章:
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 这C++代码中发生了什么C++(指数函数)
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 从"LLONG_MAX 秒"构造 std::chrono::毫秒变量时发生了什么?
- 这个片段中关于 n 在 pc[i] 中的表示发生了什么
- istringstream,num1 和 num2 在这里发生了什么?
- 究竟发生了什么,我们需要在 c++ 中双重调度/访客
- 我是否能够确定在部署一个程序后发生了什么,我在数组末尾写入?
- 这个阶乘程序内部发生了什么?
- C++ - *(int**) 地址?这里发生了什么?
- C++用用户输入在循环中填充 char 数组:输入整个字符串时到底发生了什么?
- 让对象知道它创建的 show 函数中发生了什么
- 这里的矢量数组发生了什么?
- 增加顶级常量指针时发生了什么
- 当另一端将其关闭时,插座发生了什么
- C :我堆栈顶部发生了什么
- 此递归中发生了什么?我需要仅使用递归/无循环来计算和备份
- 这个 std::vector 构造函数中发生了什么
- 编译器认为 int 是一个字符串.发生了什么事情
- 无法运行简单的 std::async 和 std::future 测试程序。错误:"has initializer but incomplete type."发生了什么?