我有一个游戏,它会创建一个随机的字母串,然后将其输入到2d矢量。我正在使用一个数组,它用随机字母填充数组,但阵列给了我一些问题。我的朋友提出了一个二维阵列。
这是打印函数,它给出了实际导致程序中断的错误:
const vector<vector<char>>& Board::get_board()
{
for (int i = 0; i < 16; i++)
{
letters.insert(letters.begin(), 1, random_letter());
}
uppercase(letters);
random_shuffle(letters.begin(), letters.end());
int counter = 0;
for (size_t i = 0; i < 4; i++){
for (size_t j = 0; j < 4; j++)
{
board[0].push_back(letters[counter++]);
}
}
我一直在让数组填充第一行,但之后会引发异常。我不确定异常是什么,但是当我尝试前进时,它会告诉我代码退出异常0并指向print方法中的board [] []行。我不认为第二个载体正在被填充。我怎样才能做到这一点?我应该制作另一个临时矢量,还是使用配对方法?我之前尝试过这种方法没有取得多大成功。
我刚刚将0改为i,确实解决了这个问题。谢谢!我认为我认为向量只会推到前面的计数器次数,而不是我们有2个维度,其中board [i]设置了行。再次感谢。愚蠢的错误。
答案 0 :(得分:0)
您的get_board()
方法中的矢量未正确填充:
board[0].push_back(letters[counter]);
你总是推回到第一个元素,然后你使用它,期望电路板向量在其中有4个条目和print()
方法。你也永远不会增加counter
,所以你总是推回同一个字母......
好的,根据评论,你已经说过你修改过更适合喜欢的东西吗?
int counter = 0;
for (size_t i = 0; i < 4; i++){
for (size_t j = 0; j < 4; j++)
{
board[i].push_back(letters[counter++]);
}
}
我也没有在print()
方法中看到if语句的意思。