for循环的两个代码有什么不同?
What is different between two codes of for loop?
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto &x : a)
cout << x << endl;
}
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto x : a)
cout << x << endl;
}
上面的两个代码打印相同的值(1、2、3、4、5)。
但是初始化 &x 和 x 之间有什么不同吗?
感谢阅读!
您编写的代码的输出没有区别。但是,如果您在循环中尝试更改 x
的值,则 会 有所不同。
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto x : a)
x = 0;
for (auto x : a)
cout << x << endl;
}
非常不同:
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto & x : a)
x = 0;
for (auto x : a)
cout << x << endl;
}
在第二个中,向量 a
将在程序结束时全为零。这是因为 auto
本身将每个元素复制到循环内的临时值,而 auto &
将 reference 带到向量的一个元素,这意味着如果您将某些内容分配给引用,它会覆盖引用指向的任何地方。
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto &x : a)
cout << x << endl;
}
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto x : a)
cout << x << endl;
}
上面的两个代码打印相同的值(1、2、3、4、5)。 但是初始化 &x 和 x 之间有什么不同吗? 感谢阅读!
您编写的代码的输出没有区别。但是,如果您在循环中尝试更改 x
的值,则 会 有所不同。
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto x : a)
x = 0;
for (auto x : a)
cout << x << endl;
}
非常不同:
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<int> a = {1, 2, 3, 4, 5};
for (auto & x : a)
x = 0;
for (auto x : a)
cout << x << endl;
}
在第二个中,向量 a
将在程序结束时全为零。这是因为 auto
本身将每个元素复制到循环内的临时值,而 auto &
将 reference 带到向量的一个元素,这意味着如果您将某些内容分配给引用,它会覆盖引用指向的任何地方。