Присвоить значение определенной позиции в векторе вектора (2D) - PullRequest
0 голосов
/ 05 ноября 2018

Хорошо, я начинаю c ++, и я хочу присвоить значение определенной позиции в векторе вектора. Я сделал это с массивом массива (2D), но теперь хотел бы сделать это с векторами.

   int main() {
        int newLine = 10;
        int newColumm = 10;
        const string WALL = "\u2588";
        cout << endl;
        string grille[10][10];
        for (int j = 0; j < newColumm + 1; j++) {
            int i = 0;
            grille[i][j] = WALL;
        }
        for (int j = 0; j < newColumm + 1; j++) {
            int i = newLine + 1;
            grille[i][j] = WALL;
        }

Я бы хотел сделать то же самое с векторами. У меня есть:

  int main() {
    int newLine = 10;
    int newColumm = 10;
    const string WALL = "\u2588";
    cout << endl;
//    string grille[10][10];
    vector<vector<string>> grille;


    for (int j = 0; j < newColumm + 1; j++) {
        int i = 0;
        grille.at(i).at(j) = WALL;
    }
    for (int j = 0; j < newColumm + 1; j++) {
        int i = newLine + 1;
        grille.at(i).at(j) = WALL;
    }

Это явно не работает на данный момент. (Извините за мой плохой язык, английский мой второй язык ...)

1 Ответ

0 голосов
/ 05 ноября 2018

Ваш вектор не имеет размера. Вы получаете исключение std::range_error при доступе к вектору за пределами. Так как вы не обрабатываете исключения, ваша программа падает.

Наивным решением для этого является простое предварительное выделение вектора для ожидаемых измерений:

vector<vector<string>> grille(10, std::vector<string>(10));

Обратите внимание, что ваши циклы for в любом случае естественным образом выйдут за пределы диапазона, и вы все равно получите исключение, так как они фактически повторяются до 10 включительно . Помните, что если у вас есть 10 элементов, то действительные индексы от 0 до 9 включительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...