web-dev-qa-db-ja.com

行列を作成するベクトルのベクトル

2Dマトリックスの次元の入力を取得しようとしています。そして、ユーザー入力を使用してこのマトリックスに入力します。私がこれを試した方法は、ベクトル(ベクトルのベクトル)を介したものです。しかし、データを読み取ってマトリックスに追加しようとすると、エラーが発生します。

//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];
    }
}

これを実行しようとするたびに、添え字が範囲外エラーになります。何かアドバイス?

50
user1487000

現状では、ベクトルの次元は両方とも0です。

代わりに、ベクトルを次のように初期化します。

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

これにより、すべての要素がRR * CCに設定された次元のマトリックス0が得られます。

68
Luchian Grigore

要素にアクセスする前に、ベクトルのベクトルを適切なサイズに初期化する必要があります。次のようにできます:

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

これにより、0で埋められたRRサイズCCベクトルのベクトルが作成されます。

159
juanchopanza

私は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);
}
10
Shmiddty

Vectorは、cin>>v[i][j]として使用する前に初期化する必要があります。 1Dベクトルであっても、初期化が必要です このリンクを参照

初期化後、エラーは発生しません このリンクを参照

0
Mohit Malik

これを試して。 m =行、n =列

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;
}
0
SubhaBhowmik

初期化したのは、ベクトルのベクトルです。したがって、挿入するベクトルを必ず含める必要があります( "Pushed"ベクトルの用語で)元のベクトルであなたの例ではmatrixという名前が付けられています。

もう1つ、演算子「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 
}
0
Shantanu Garg