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

最佳答案

for (auto it : digits){


范围变量本质上是从序列中按值复制的,因此

   swap(tmpInt, it);


这一切都是在tmpInt和一个临时范围变量之间交换。

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

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

关于c++ - 为什么这种交换方法不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42545836/

10-11 18:20