gpt4 book ai didi

C++为什么结构对象值在循环结束时重置回零

转载 作者:太空狗 更新时间:2023-10-29 23:35:10 26 4
gpt4 key购买 nike

我创建了一个简单的结构对象,它包含 2 个值 - number(特定数字)和 count(数字出现次数的计数器)。

typedef struct matrixMissNumber {
int number;
int count = 0;
}

然后我创建了一个名为 missingNumsObjects 的列表来保存这些对象。 missNums 是一个单独的列表,只包含整数。

list<matrixMissNumber> missingNumsObjects;
for (auto m : missNums)
{
matrixMissNumber mn;
mn.number = m;
missingNumsObjects.push_back(mn);
}

然后我有 3 个 for 循环通过并检查 2 个条件。如果满足这些条件,则计数递增 1。(我添加了一个 cout 语句用于测试目的)。 我调试了程序,一切正常,直到循环结束。那是 missingNumsObjects 中每个 matrixMissNumber 对象的计数变量重置回 0 的时候。我不确定是否是不同内存地址被操作的问题,或者列出指针这就是问题所在。

for (auto m : missingNumsObjects)
{
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < 3; y++)
{
if (sudoku[x][y] == 0)
{
if (checkRowRule(m.number, x) == false && checkColumnRule(m.number, y) == false)
{
m.count++;
cout << m.number << " - " << m.count << endl;
}
}
}
}
}

下一行在循环后打印出 missingNumsObjects 的计数值。这是值返回到 0 的地方。

for (auto m : missingNumsObjects)
cout << m.number << " - " << m.count << endl;

此程序的用途是数独求解器。该算法的这一部分检查 3x3 矩阵中是否有缺失的数字,并检查该数字可以进入 3x3 矩阵中的多少个空位。

最佳答案

for (auto m : missingNumsObjects)

这里auto被推导为matrixMissNumber,所以mmatrixMissNumber对象的一个​​拷贝,存储在列表中.然后更改拷贝,而不是列表 missingNumsObjects 中的对象。

要解决此问题,请帮助编译器正确推导类型并将循环更改为:

for (auto& m : missingNumsObjects)

关于C++为什么结构对象值在循环结束时重置回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45464955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com