矢量矢量来创建矩阵

问题描述 投票:47回答:6

我正在尝试输入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];
    }
}

每当我尝试这样做时,它会给我一个超出范围错误的下标。有什么建议?

c++ vector matrix
6个回答
68
投票

实际上,矢量的两个维度都是0。

相反,将矢量初始化为:

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

这将为您提供尺寸为RR * CC的矩阵,所有元素都设置为0


158
投票

在访问任何元素之前,必须将向量向量初始化为适当的大小。你可以这样做:

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

这创建了RR大小CC向量的向量,充满0


10
投票

我不熟悉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);
}

0
投票

试试这个。 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
投票

你初始化的是矢量矢量,所以你必须在你的例子中命名为矩阵的原始矢量中包含一个要插入的矢量(在矢量术语中“推”)。

还有一件事,你不能使用运算符“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
投票

在将qzxswpoi用作cin>>v[i][j]之前,需要初始化Vector。即使它是1D向量,它仍然需要初始化,see this link

初始化后,将没有错误,see this link

© www.soinside.com 2019 - 2024. All rights reserved.