2017-03-02 30 views
0

爲什麼以下兩段代碼有不同的結果?我想在數字前添加1,這是一個整數向量。但第二個片段沒有正確交換。爲什麼這個交換方法不起作用?

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仍然是6而不是4 ????' – immibis

+0

我認爲「它」不是一個迭代器,所以也許你想改變它的名字 –

回答

4
for (auto it : digits){ 

範圍變量被基本上由值複製,從序列,所以

swap(tmpInt, it); 

這一切正在做的是tmpInt和一個之間交換臨時範圍變量。

您需要使用一個參考,爲了得到與第一實施例相同的結果:

for (auto &it : digits){ 
    swap(tmpInt, it);