【发布时间】:2020-07-22 22:42:41
【问题描述】:
以下代码不会改变for循环中i的内容:
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
if (target == 0) {return vector<vector<int>>{{}};}
else if (!candidates.size() || target < 0) {return vector<vector<int>>();}
else {
vector<vector<int>> with = combinationSum(candidates, target - candidates[0]);
vector<int> new_vector(candidates.begin() + 1, candidates.end());
vector<vector<int>> without = combinationSum(new_vector, target);
for (auto i : with) {i.push_back(candidates[0]);}
with.insert(with.end(), without.begin(), without.end());
return with;
}
}
};
但是,如果我将其更改为 auto& i : with ...,它可以工作。有什么原因吗?我认为只有在使用指向对象或不希望变量(在本例中为 i)在本地范围内更改时,引用才相关。
【问题讨论】:
-
尖锐物体是什么意思?
-
如果你先使用
auto& i,然后再使用i.push_back(...),你就会改变with。否则,您将更改内部vector的副本
标签: c++ reference stl iterator range-based-loop