C ++为什么结构对象值在循环结束时重置回零
C++ why struct object values reset back to ZERO at end of loop
我创建了一个简单的结构对象,它包含 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 的计数值。这是值 return 回到 0.
的地方
for (auto m : missingNumsObjects)
cout << m.number << " - " << m.count << endl;
此程序的用途是数独求解器。该算法的这一部分检查 3x3 矩阵中是否有缺失的数字,并检查该数字可以进入 3x3 矩阵中的多少个空位。
for (auto m : missingNumsObjects)
这里auto
推导为matrixMissNumber
,所以m
是列表中存储的matrixMissNumber
对象的副本。然后你更改副本,而不是列表中的对象 missingNumsObjects
.
要解决此问题,请帮助编译器正确推导类型并将循环更改为:
for (auto& m : missingNumsObjects)
你将从中获得最大收获的问题其实就在这里
"I debugged the program and everything works perfectly, until the
loops end".
在循环结束之前,事情并不完美。您从未检查过列表的内容,您会注意到它从未改变。
这样做的寓意是,在调试时,检查应该更改的内容,而不是您要分配给的内容。
我创建了一个简单的结构对象,它包含 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 的计数值。这是值 return 回到 0.
的地方for (auto m : missingNumsObjects)
cout << m.number << " - " << m.count << endl;
此程序的用途是数独求解器。该算法的这一部分检查 3x3 矩阵中是否有缺失的数字,并检查该数字可以进入 3x3 矩阵中的多少个空位。
for (auto m : missingNumsObjects)
这里auto
推导为matrixMissNumber
,所以m
是列表中存储的matrixMissNumber
对象的副本。然后你更改副本,而不是列表中的对象 missingNumsObjects
.
要解决此问题,请帮助编译器正确推导类型并将循环更改为:
for (auto& m : missingNumsObjects)
你将从中获得最大收获的问题其实就在这里
"I debugged the program and everything works perfectly, until the loops end".
在循环结束之前,事情并不完美。您从未检查过列表的内容,您会注意到它从未改变。
这样做的寓意是,在调试时,检查应该更改的内容,而不是您要分配给的内容。