2017-03-02 31 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);