多维数组

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)

Som*_*ude 5

如果您不使用引用,那么您将复制数据

如果您制作副本(按迭代)而不是使用引用,则您只会修改本地副本,而不会修改原始数据。

当然,这是针对输入循环的,您可以在其中

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)