【发布时间】:2017-08-02 15:25:53
【问题描述】:
我创建了一个简单的结构对象,它包含 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 个条件。如果满足这些条件,则 count 递增 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 矩阵中有多少个空白点。
【问题讨论】:
-
向复制构造函数问好。
-
不要在 C++ 中使用
typedef struct构造。这不仅没有必要,而且会产生问题。