矢量矢量来创建矩阵

use*_*000 51 c++ vector matrix

我正在尝试输入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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

jua*_*nza 161

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

// assumes using std::vector for brevity
vector<vector<int>> matrix(RR, vector<int>(CC));
Run Code Online (Sandbox Code Playgroud)

这将创建一个RR大小CC向量的向量,填充0.

  • +1:这也是我的意思.很惊讶你是唯一一个给出这个答案的人.顺便说一句,我永远不会使用向量向量来表示矩阵.=) (2认同)
  • @paddy我知道这很正常,但通常不是一个好主意。我的矩阵大小固定,可大大减少错误的范围。 (2认同)
  • @paddy我想说的是我的矩阵的尺寸是矩阵的类型,所以它们不能改变.由于我将矩阵视为数学对象而不是存储空间,因此使用编译器强制执行某些约束(对我来说)是有意义的,例如,您不能将2x4矩阵分配给5x1,或者您不能将矩阵与矩阵相乘没有兼容的尺寸.存储本身是一个单独的块,在我的情况下静态分配,因为我倾向于处理小矩阵,但可以很容易地适应动态分配而不影响类型安全. (2认同)

Luc*_*ore 69

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

相反,将矢量初始化为:

vector<vector<int> > matrix(RR);
for ( int i = 0 ; i < RR ; i++ )
   matrix[i].resize(CC);
Run Code Online (Sandbox Code Playgroud)

这将为您RR * CC提供所有元素设置为的维度矩阵0.

  • 您可以在一条语句中创建大小为CC向量的大小RR向量,并避免调整大小。 (2认同)

Shm*_*dty 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);
}
Run Code Online (Sandbox Code Playgroud)

  • @LuchianGrigore:从std :: cin中读取一个矩阵会杀死你关于性能的论点 (10认同)
  • 正确,但由于随后的推迟而遭受性能损失. (3认同)