使用对范围中的矢量元素的引用
Using a reference to vector elements in a ranged for
我试图理解为什么我需要在范围中使用引用,以使以下表达式应用于向量中的元素。
该代码只是定义一个向量并初始化一些元素,然后使用范围 for 对它们进行平方,并打印输出。
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)
然后元素不会平方。这里有什么区别?我不明白在这种情况下需要使用引用,但以后当我想使用另一个范围 for 来引用每个元素时,我就不明白了。
简单地说:
for (auto i : v1)
将值复制到新变量中。
for (auto &i : v1)
引用向量中的实际值。
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
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 设计将引用元素移动到开头的数据结构.C++
- 为什么通过 vector<reference_wrapper> 的元素删除引用的值<T>不会使向量无效?
- 将新元素添加到列表中,并返回对该元素的引用?
- 如何告诉自动推断向量<bool>元素的非引用类型
- 通过引用访问矢量元素是否会降低C++的空间复杂性?
- 通过引用传递时访问std::vector的元素
- 如何取消引用和打印指针数组的每个元素?
- 如何从模板获取常量矢量元素的引用
- 调整大小后保持对矢量元素的引用有效
- 取消引用C++中的指针元素
- 在这种情况下,如何返回对数组中元素的引用?
- C++ - 返回对矢量元素的引用
- 引用保留向量中的第一个元素
- C++ 当容器在使用前被破坏/修改时发出警告(通过引用元素或迭代器使用)
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 如何理解取消引用指向数组的指针会获取指向元素的指针
- 如何将一个向量的元素引用复制到另一个向量?
- 通过[]运算符返回矢量元素引用