我正在编写一个允许用户玩数独游戏的程序。每个谜题都是2d结构数组,但我无法一次性初始化数组。有没有办法做到这一点,而不需要为数组的每个元素初始化结构的每个部分?这是我的一些代码。
class Sudoku {
protected:
struct Puzz {
int Ans;
// IsClue is used further in the program so the user cannot change the clues given.
bool IsClue;
};
Puzz Puzzle[9][9]; // I chose a 2D array so represent the 9 rows and columns of a sudoku puzzle
};
我尝试了以下一些方法:
Puzzle[][9] = {{0, false, 8, true, 0, false, 6, true, 7, true, 0, false, 0, false, 0, false, 0, false}, //...etc, going on for each row
Puzzle[9][9] = // etc, etc, but I get an error saying "Expected an expression
是初始化要执行的每个元素的唯一方法
Puzzle[x][y].Ans = x; Puzzle[x][y].IsClue = true/false;?
答案 0 :(得分:1)
问题是您尝试将分配给数组,而这根本不可能。你需要实际初始化它,这是完全不同的。
如果你不介意写很多几乎相同的行,那么你可以使用constructor member initializer list。比如说。
Sudoku::Sudoku()
: Puzzle{{...}, {... }, ... }
{}
如果数组中只有少数结构与某些默认值不同,那么您可以使用例如数组将数组中的所有条目设置为相同的默认值。 std::fill
然后更改那些具有特殊值的条目。
答案 1 :(得分:0)
要初始化二维数组,请使用for循环。如:
for (int i = 0; i < row_count; i++) {
for (int j = 0; j < col_count; j++) {
item[i][j] = initial_value;
}
}
如果你想使用如上所述的初始化列表,你可以通过简单地将结构的每个实例包装在括号中来实现。但是,使用文字初始化您的sodoku板并不是为播放器生成sodoku板的特别可扩展的方法。也就是说,而不是:
Puzzle puzz[9][9] = {{0, false, 8, true, 0, false, 6, true, 7, true, 0, false, 0, false, 0, false, 0, false, ...}};
你会使用:
Puzzle puzz[9][9] = {
{ // First row
{0, false}, // first column
{8, true}, // second column
...
},
{ // Second row
...
},
...
};
由于这是C ++,您可能希望考虑使用嵌套向量(即vector<vector<Cell>>
)来表示您的电路板。虽然这可能是过度的,特别是对于Sodoku板(特别是如果它总是9x9),这将允许您更容易地表示非标准板尺寸,并且矢量数据结构具有默认初始化/填充所有成员的能力具有预先指定的值。正如@paddy在评论中恰当地指出的那样,还有其他函数(如std::fill
可以与普通数组一起使用来处理常见用例。
答案 2 :(得分:0)
您可以使用c ++ 11或更高版本中的初始化列表进行初始化:
"/auth/twitter"
如果在类中,您可以默认以相同的方式构造它:
Puzz Puzzle[2][2] = {
{ {8, true}, {9, false} },
{ {10, true}, {11, false} }
};
虽然,如果它非常大,这可能会变得相当混乱。所以最后的方法可能是在循环中初始化它。
答案 3 :(得分:0)
这是一个显示如何初始化2 x 2阵列的示例。我将把它扩展到9 x 9阵列。
class Sudoku {
Sudoku();
protected:
struct Puzz {
int Ans;
bool IsClue;
};
Puzz Puzzle[2][2];
};
Sudoku::Sudoku() : Puzzle{{{0, false}, {1, true}}, {{2, false}, {3, true}}}
{
}
话虽如此,创建一个Puzz
的默认构造函数可能更容易,它对大多数对象做了明智的事情,然后只修改Puzzle
中Sudoku
的选择元素& #39; s构造函数。
class Sudoku {
Sudoku();
protected:
struct Puzz {
int Ans;
bool IsClue;
Puzz() : Ans(0), IsClue(false) {}
};
Puzz Puzzle[2][2];
};
Sudoku::Sudoku()
{
// Change specific elements of Puzzle
}