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并未修改;
这种不加引用的修改是不会作用在原数组上的;
在我加上引用后:
会发现他的确在原数组上修改了!