Поэтому я пытаюсь написать простой код, который будет принимать 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.
Массивы 0 проиндексированы. x
а также y
размер массивов. Вы не можете использовать значение размера в качестве значения индекса.
Например:
a
имеет размер 5. "a"
находится в индексе 0, "e"
находится в индексе 4. "e"
5-й элемент в списке. Когда вы пытаетесь использовать размер 5 в качестве индекса, ну, как видно, элемент с индексом 5 отсутствует. Последний элемент будет доступен a[size - 1]
, Хотя помните, размер 0 приводит к индексу -1, который является недопустимым индексом.
C ++ массивы работают так:
vector<int> v = {2, 4, 6, 8}
//index: 0 1 2 3
Следовательно, последний элемент в массиве будет opt[x - 1][y - 1]
,