Абоненты двухмерных векторов выходят за пределы диапазона, даже когда они находятся в диапазоне

Поэтому я пытаюсь написать простой код, который будет принимать 2 строки от пользователей. Затем он берет длину строки с помощью length () и создает матрицу (2d-вектор) целых чисел на основе длин. Затем мне нужно установить значения последней строки и последнего столбца, чтобы они имели значения степеней 2.
Если введенные строки «счастливы» & «грустная» результирующая матрица должна быть:

0 0 0 0 0 6
0 0 0 0 0 4
0 0 0 0 0 2
10 8 6 4 2 0

Я генерирую матрицу следующим образом:

    vector<vector<int>> opt;
unsigned int x, y;
x = (sequenceOne.length()) + 1;
y = (sequenceTwo.length()) + 1;

unsigned int p,q;

opt.resize(y, vector<int>(x, 0)); // resizes the matrix

Когда я пытаюсь изменить значения в матрице с:

    opt[2][2] = 5;

Это работает нормально, но когда я иду к последнему столбцу, последний столбец выглядит так:

    opt[x][y]

Он говорит мне: «Выражение: векторный индекс вне диапазона». Я думаю, что это как-то связано с получением длины строк для использования в качестве значений, но я не могу понять, почему это вызвало бы вопрос.
Я пытался сделать подписки разными переменными, разными порядками и тому подобным, например, opt [x-1] [y-1], но ошибка все равно возникает.

Я не уверен, если это имеет значение, но я использую MS VS2012.

1

Решение

Массивы 0 проиндексированы. x а также y размер массивов. Вы не можете использовать значение размера в качестве значения индекса.

Например:
введите описание изображения здесь

a имеет размер 5. "a" находится в индексе 0, "e" находится в индексе 4. "e" 5-й элемент в списке. Когда вы пытаетесь использовать размер 5 в качестве индекса, ну, как видно, элемент с индексом 5 отсутствует. Последний элемент будет доступен a[size - 1], Хотя помните, размер 0 приводит к индексу -1, который является недопустимым индексом.

1

Другие решения

C ++ массивы работают так:

vector<int> v = {2, 4, 6, 8}
//index:         0  1  2  3

Следовательно, последний элемент в массиве будет opt[x - 1][y - 1],

0