我试图理解为什么我需要在范围内使用引用,以使以下表达式适用于向量中的元素。
代码仅定义一个向量并初始化一些元素,然后使用range对其进行平方,然后输出输出。
int main() {
vector<int> v1{1,2,3,4,5};
for (auto &i : v1)
i *= i;
for (auto i : v1)
cout << i << " ";
cout << endl;
}
以上方法有效,但如果是我第一次使用,则使用:
for (auto i : v1)
然后,元素不平方。这有什么区别?我不了解在这种情况下是否需要使用引用,但后来却不想使用其他范围的cout来引用每个元素。
答案 0 :(得分:1)
简单地说:
for (auto i : v1)
将值复制到新变量中。
for (auto &i : v1)
引用向量中的实际值。
答案 1 :(得分:0)
int i = 7; // i = 7
int j = i; // j = 7 (a copy of i)
j *= j; // j = 49 (but i, fortunately, is still 7)
当然:
int i = 7; // i = 7
auto j = i; // j = 7 (a copy of i)
j *= j; // j = 49 (but i is still 7)
在基于范围的循环中也会发生同样的情况:
for (auto i : v) // i is a copy of an element of v
i*= i; // you square the copy of the element of v, not the element itself