Zoo*_*oon -1 c++ for-loop range-based-loop
我很好奇为什么我们要这样处理多维数组
for (auto& row : mat1)
{
for (int& elements : row)
{
cin >> elements;
}
}
Run Code Online (Sandbox Code Playgroud)
当我们创建一个名为 elements 的临时变量来遍历行并获取每个值时,为什么要使用 &(pass by ref)。以及 for (auto& row : mat1) 中的 & ,有人可以解释这整个部分的每个细节吗?
using namespace std;
int main()
{
const int row{ 3 }, col{ 3 };
array<array<int, col>, row > mat1;
cout << "Enter matrix 1 elements: ";
for (auto& row : mat1)
{
for (int& elements : row)
{
cin >> elements;
}
}
for (auto& row : mat1)
{
for (int& elements : row)
cout << elements << " ";
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用引用,那么您将复制数据。
如果您制作副本(按值迭代)而不是使用引用,则您只会修改本地副本,而不会修改原始数据。
当然,这是针对输入循环的,您可以在其中
cin >> elements;
Run Code Online (Sandbox Code Playgroud)
在输出循环中,不需要int元素本身的引用,但我建议使用const数组的引用,否则您会制作一个副本,这可能会很昂贵。
所以在输出循环中:
for (auto const& row : mat1)
{
for (auto element : row)
{
std::cout << element;
}
}
Run Code Online (Sandbox Code Playgroud)