Подтвердить что ты не робот

Вектор векторов для создания матрицы

Я пытаюсь взять вход для размеров двумерной матрицы. Затем используйте пользовательский ввод, чтобы заполнить эту матрицу. Способ, которым я пытался это сделать, - это векторы (векторы векторов). Но я сталкивался с некоторыми ошибками всякий раз, когда пытался читать данные и добавлял их в матрицу.

//cin>>CC; cin>>RR; already done
vector<vector<int> > matrix;
for(int i = 0; i<RR; i++)
{
    for(int j = 0; j<CC; j++)
    {
    cout<<"Enter the number for Matrix 1";
         cin>>matrix[i][j];
    }
}

Всякий раз, когда я пытаюсь это сделать, он дает мне индекс ошибки вне диапазона. Любой совет?

4b9b3361

Ответ 1

Как бы то ни было, оба размера вашего вектора равны 0.

Вместо этого инициализируйте вектор следующим образом:

vector<vector<int> > matrix(RR);
for ( int i = 0 ; i < RR ; i++ )
   matrix[i].resize(CC);

Это даст вам матрицу размеров RR * CC со всеми элементами, установленными в 0.

Ответ 2

Перед доступом к любым элементам вы должны инициализировать вектор векторов до соответствующего размера. Вы можете сделать это следующим образом:

// assumes using std::vector for brevity
vector<vector<int>> matrix(RR, vector<int>(CC));

Это создает вектор векторов CC размера RR, заполненных 0.

Ответ 3

Я не знаком с c++, но быстрый взгляд на документацию подсказывает, что это должно работать:

//cin>>CC; cin>>RR; already done
vector<vector<int> > matrix;
for(int i = 0; i<RR; i++)
{
    vector<int> myvector;
    for(int j = 0; j<CC; j++)
    {
        int tempVal = 0;
        cout<<"Enter the number for Matrix 1";
        cin>>tempVal;
        myvector.push_back(tempVal);
    }
    matrix.push_back(myvector);
}

Ответ 4

попробуй это. т = строка, п = Col

vector< vector<int> > matrix(m,vector<int>(n));

for(i=0;i<m;i++)
{
   for(j=0;j<n;j++)
   {
      cin>>matrix[i][j];
   }
   cout<<endl;
}
cout<<"::matrix::"<<endl;
for(i=0;i<m;i++)
{
    for(j=0;j<n;j++)
    {
        cout<<matrix[i][j]<<" ";
    }
    cout<<endl;
}

Ответ 5

То, что вы инициализировали, является вектором векторов, поэтому вам обязательно нужно включить вектор, который нужно вставить ("Вдавлено" в терминологию векторов) в исходном векторе, который вы назвали матрицей в вашем примере.

Кроме того, вы не можете напрямую вставлять значения в вектор, используя оператор "cin". Используйте переменную, которая принимает входные данные, а затем вставляет их в вектор.

Попробуйте это:

int num;
for(int i=0; i<RR; i++){

      vector<int>inter_mat;       //Intermediate matrix to help insert(push) contents of whole row at a time

      for(int j=0; j<CC; j++){
           cin>>num;             //Extra variable in helping push our number to vector
           vin.push_back(num);   //Inserting numbers in a row, one by one 
          }

      v.push_back(vin);          //Inserting the whole row at once to original 2D matrix 
}