C++中应用于for循环的auto机制,有引用和非引用两种操作

因为今天在做leetcode上每日一题时碰到这样一种情况,我用for(auto a:A)来对一个二维数组进行值的修改时,发现它并不作用在原数组上,就是修改后,原数组的值仍然无变化,于是上网查了查:

其中一小段代码的功能就是将二维数组中的首元素为0的行进行翻转(每个元素0变1,1变0)

void matrixScore(vector<vector<int>> &A)
{
    int len_row = A.size(), len_col = A[0].size();
    for (auto a : A)
    {
        if (!a[0])
        {
            for (int j = 0; j < len_col; j++)
            {
                if (a[j])
                    a[j] = 0;
                else
                    a[j] = 1;
            }
        }
    }
}

int main()
{
    vector<vector<int>> test = {{0, 0, 1, 1}, {1, 0, 1, 0}, {1, 1, 0, 0}};
    matrixScore(test);
    return 0;
}

当我debug时:
1°刚开始进入循环:
在这里插入图片描述
因为第一个元素为0,这里我要对第一行进行翻转;
2°,当我的j=1时,此时已经对第一个元素进行翻转了:
在这里插入图片描述
会发现我的a数组确实修改了,但是原数组A并未修改;
这种不加引用的修改是不会作用在原数组上的;

在我加上引用后:
在这里插入图片描述
会发现他的确在原数组上修改了!

原文地址:https://www.cnblogs.com/Luweir/p/14147197.html