Заполнение многомерного вектора во время выполнения

0

Очевидно, что это не работает, поэтому код неправильный, но как его исправить? Вся эта вещь может быть неправильной для всех, кого я знаю, но я пытаюсь создать многомерный вектор, который создается во время выполнения. Я получаю ошибку: vector subscript out of range.

#include <iostream>
#include <vector>

int main(){
   int row = 0, col = 0;
   std::cout << "Size of Row: "; std::cin >> row; 
   std::cout << "Size of Column: "; std::cin >> col;

   std::vector<std::vector<int>> td;
   td.resize(row * col);

   for (int i = 0; i <= row; i++){
      for (int j = 0; j <= col; j++){
        td[i][j];
      }
   }
}
Теги:
multidimensional-array
vector

3 ответа

2
Лучший ответ

Вы должны выделить соответствующий объем памяти вектору векторов. Вместо изменения размера вы можете явно указать количество пустых строк и столбцов со следующим кодом.

std::vector< std::vector<int> > td(row+1, std::vector<int>(col+1)); 
//+1 is needed because the loop you created is <=

В противном случае вы можете настроить цикл и выполнить следующие действия:

std::vector< std::vector<int> > td(row, std::vector<int>(col));

for (int i = 0; i < row; i++){
  for (int j = 0; j < col; j++){
    td[i][j];
  }
}
3

Когда вы используете

td.resize(row * col);

первым измерением td будет row*col, но его второе измерение все еще пусто. Вот почему вы получили ошибку.

Вы должны использовать

td.resize(row); // set first dimension
for (int i=0; i<row; i++) // set each second dimenstion
    td[i].resize(col);

или просто

vector<vector<int>> td(row, vector<int>(col)); // has rows, each of them has cols
2

td относится к внешнему вектору, поэтому ваш размер уменьшает вектор пустых векторов row'col. Вам нужно будет изменить размер, чтобы просто набрать строку, тогда ваш цикл for я может сказать td [i].resize(col) внутри, чтобы сделать его двумерным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню