#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> arr {12,13,14,15,16};
for (auto & x: arr)
{
++x;
cout << x << " ";
}
return 0;
}
VS
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int> arr {12,13,14,15,16};
for (auto x: arr)
{
++x;
cout << x << " ";
}
return 0;
}
输出保持不变,我们得到矢量中每个值的增量为1。但是我的教科书说了这一点。Text Book Image当我的教科书上说“ x假定向量中每个值都有一个副本”时,这是什么意思?
这里是屏幕截图中输出的代码Code Output第一个输出是&第二个输出不带&
我认为您需要更改矢量元素(将它们递增1),因此,如果按值传递矢量元素,则循环将使用矢量元素的副本,而不是元素本身。
因此,您必须使用对矢量元素的引用。
您可以通过使用注释中的提示来确保这一点。
输出保持不变
添加参考(&
),如果您删除参考(&
),则仅传递x
的值,而不传递x
本身,因此,如果您有以任何方式更改x
的代码,需要通过引用传递它,否则您只更改一个局部变量,而不是原始变量。因此,如果再次打印矢量,您将看到版本中没有参考的结果将不会更改。