c++ 多维数组[重复]

wbrvyc0a  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(155)
    • 此问题在此处已有答案**:

Why does auto works differently in "range for" in 2D and 1D arrays in C++(4个答案)
昨天关门了。
我很好奇为什么我们要用这种方式来遍历多维数组

for (auto& row : mat1)
    {
        for (int& elements : row)
        {
            cin >> elements;
        }
    }

当我们创建一个名为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;
    }
nkoocmlb

nkoocmlb1#

如果您不使用引用,那么您将制作数据的“副本”。
而且如果您制作了一个副本(按 value 迭代)而不是使用引用,那么您将只修改本地副本,而不是原始数据。
当然,这是针对输入环路的,其中有

cin >> elements;

在输出循环中,不需要int元素本身的引用,但是我建议对数组使用const引用,因为否则会产生开销很大的副本。
因此,在输出循环中:

for (auto const& row : mat1)
{
    for (auto element : row)
    {
        std::cout << element;
    }
}

相关问题