使用对范围为的矢量元素的引用

时间:2019-04-23 19:32:48

标签: c++ vector reference

我试图理解为什么我需要在范围内使用引用,以使以下表达式适用于向量中的元素。

代码仅定义一个向量并初始化一些元素,然后使用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来引用每个元素。

2 个答案:

答案 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