中級 › 範囲for文で要素をコピーしてしまい変更が反映されないバグ › パターン1
範囲for文で要素をコピーしてしまい変更が反映されないバグ
for (int n : nums) のように範囲for文の変数を値(コピー)で受け取っているため、ループの中でnを書き換えても元のvectorの要素は変わらないバグです。
1 #include <iostream> 2 #include <vector> 3 int main() { 4 std::vector<int> nums = {1, 2, 3}; 5 for (_________ n : nums) { ^ 6 n *= 2; 7 } 8 for (int n : nums) std::cout << n << " "; 9 std::cout << std::endl; 10 return 0; 11 }
出力: 1 2 3期待: 2 4 6
空欄を埋めてコンパイル・実行を通す
for (int n : nums)は各要素をnという新しい変数にコピーしているだけです。nを書き換えても元のvectorの要素には影響しません。直接書き換えるにはint&で受け取ります。
次の問題