我试图采用可变长度的输入文件,如下所示:
xxooo##xx
xoxxxoxoo
xxx#oxoo#
oxxxoxoox
xxoooo#xx
并将其转换为3D字符向量,其中每行为3x3框,前三个字符为第一行,后三个为第二行,后三个为第3行。例如,输入的第一行应该变为:
x x o
o o #
# x x
这是我尝试解决的问题,但是当我尝试运行它时,我遇到了分段错误。我是C ++的新手,所以这是我第一次尝试使用3D矢量而且我没有任何明确的错误信息可以继续,所以我有点卡住了。
vector<vector<vector<char> > > makeBoard(vector<string> iflines)
{// Function to fill game boards from input strings
vector<vector<vector<char> > > charboard;
for (int i = 0; i != iflines.size(); i++)
{
for (int j = 0; j < 9; j=j+3)
{
charboard[i][j/3][0] = iflines[i][j];
charboard[i][j/3][1] = iflines[i][j+1];
charboard[i][j/3][2] = iflines[i][j+2];
}
}
return charboard;
}
答案 0 :(得分:4)
vector<vector<vector<char> > > makeBoard(vector<string> iflines)
{// Function to fill game boards from input strings
vector<vector<vector<char> > > charboard;
for (int i = 0; i != iflines.size(); i++)
{
vector<vector<char> > line(3, vector<char>(3));
for (int j = 0; j < 9; ++j)
{
line[j / 3][j % 3] = iflines[i][j];
}
charboard.push_back(line);
}
return charboard;
}
对于iflines
的每个元素,line
被初始化为char的向量的3x3向量。它被填充在循环中并被推到charboard
的后面。
答案 1 :(得分:2)
或者,一行初始化可能类似于
<ui-gmap-google-map center='{expression}'
control='{Object}'
zoom='{expression}'
dragging='{expression}'
refresh='{expression}'
options='{expression}'
events='{expression}'
bounds='{expression}'
pan='{string or boolean}'
>
<!-- other ui-gmap-directives here -->
</ui-gmap-google-map>
答案 2 :(得分:0)
您正在按索引访问charboard
的元素,但尚未对其进行初始化。
您可以使用push_back
但您知道向量的大小,因此最好将其初始化为正确的大小。外部维度为iflines.size()
。内部的两个维度分别为3和3.由于它们很小并且在编译时已知,因此内部类型可能值得使用固定大小的内容,如array
:
using Board = std::array<std::array<char, 3>, 3>;
然后你可以写:
std::vector<Board> makeBoard(const std::vector<std::string>& iflines)
{
std::vector<Board> charboard(iflines.size());
for (int i = 0; i != iflines.size(); i++)
{
for (int j = 0; j != 9; ++j)
{
charboard[i][j / 3][j % 3] = iflines[i][j];
}
}
return charboard;
}