如何在2d向量的前面添加元素

时间:2013-12-07 01:26:19

标签: c++ vector 2d

我有一个游戏,它会创建一个随机的字母串,然后将其输入到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]设置了行。再次感谢。愚蠢的错误。

1 个答案:

答案 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语句的意思。