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];
}
}
これを実行しようとするたびに、添え字が範囲外エラーになります。何かアドバイス?
現状では、ベクトルの次元は両方とも0です。
代わりに、ベクトルを次のように初期化します。
vector<vector<int> > matrix(RR);
for ( int i = 0 ; i < RR ; i++ )
matrix[i].resize(CC);
これにより、すべての要素がRR * CC
に設定された次元のマトリックス0
が得られます。
要素にアクセスする前に、ベクトルのベクトルを適切なサイズに初期化する必要があります。次のようにできます:
// assumes using std::vector for brevity
vector<vector<int>> matrix(RR, vector<int>(CC));
これにより、0
で埋められたRR
サイズCC
ベクトルのベクトルが作成されます。
私は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);
}
これを試して。 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;
}
初期化したのは、ベクトルのベクトルです。したがって、挿入するベクトルを必ず含める必要があります( "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
}