2017-03-02 3 views
0

以下の2つのコードスニペットの結果が異なるのはなぜですか?私は整数のベクトルである数字の前に1を加えたいと思う。しかし、2番目のスニペットは正しくスワップしません。このスワップ方法が機能しないのはなぜですか?

int tmpInt(1); 
for (int i=0; i<digits.size(); i++){ 
    swap(tmpInt, digits[i]); 
} 
digits.push_back(tmpInt); 

対:そう

int tmpInt(1); 
for (auto it : digits){ 
    swap(tmpInt, it); 
} 
digits.push_back(tmpInt); 
+0

レトリック: 'int型のx = 6; int y = x; y = 4; //なぜxがまだ4ではなく6か? – immibis

+0

"it"はイテレータではないと思うので、名前を変更したい –

答えて

4
for (auto it : digits){ 

範囲変数が本質的に配列から、値によってコピーされます、

swap(tmpInt, it); 

このすべてはtmpIntとの間でスワップされているのです一時的な範囲変数。

あなたが最初の例と同等の結果を得るために、参照を使用する必要がある:

for (auto &it : digits){ 
    swap(tmpInt, it); 
関連する問題