为什么这种交换方法不起作用?

时间:2017-03-02 02:39:09

标签: c++

为什么以下两段代码会有不同的结果?我想在数字前添加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);

1 个答案:

答案 0 :(得分:4)

for (auto it : digits){

范围变量基本上由序列中的值复制,因此

   swap(tmpInt, it);

所有这一切都是在tmpInt和临时范围变量之间进行交换。

您需要使用引用,以便在第一个示例中获得相同的结果:

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