多维向量

30 c++ vector

如何创建2D矢量?我知道在2D数组中,我可以表达如下:

a[0][1]=98;
a[0][2]=95;
a[0][3]=99;
a[0][4]=910;

a[1][0]=98;
a[1][1]=989;
a[1][2]=981;
a[1][3]=987;
Run Code Online (Sandbox Code Playgroud)

如何使用C++ STL Vector实现这一目标?

Ari*_*Ari 32

vector<vector<int> > a;

如果要定义行和列,

vector<vector<int> > a{{11, 2, 4}, {4, 5, 6}, {10, 8, -12}};

  • 如何定义行和列? (2认同)

Dav*_*eas 30

std::vector< std::vector< int > > a; // as Ari pointed
Run Code Online (Sandbox Code Playgroud)

将其用于不断增长的矩阵可能会变得复杂,因为系统不能保证所有内部向量都具有相同的大小.无论何时在第二维上成长,您都必须明确地增长所有向量.

// grow twice in the first dimension
a.push_back( vector<int>() );
a.push_back( vector<int>() );

a[0].push_back( 5 ); // a[0].size() == 1, a[1].size()==0
Run Code Online (Sandbox Code Playgroud)

如果这对你来说没问题(它不是一个矩阵而是向量的向量),你应该没问题.否则,您需要特别注意保持所有向量的第二维稳定.

如果您在固定大小的矩阵上进行规划,那么您应该考虑封装在类中并重写operator()而不是提供双数组语法.在这里阅读关于此的C++ FAQ


aJ.*_*aJ. 13

std::vector< std::vector<int> > a;

    //m * n is the size of the matrix

    int m = 2, n = 4;
    //Grow rows by m
    a.resize(m);
    for(int i = 0 ; i < m ; ++i)
    {
        //Grow Columns by n
        a[i].resize(n);
    }
    //Now you have matrix m*n with default values

    //you can use the Matrix, now
    a[1][0]=98;
    a[1][1]=989;
    a[1][2]=981;
    a[1][3]=987;

//OR
for(i = 0 ; i < m ; ++i)
{
    for(int j = 0 ; j < n ; ++j)
    {      //modify matrix
        int x = a[i][j];
    }

}
Run Code Online (Sandbox Code Playgroud)


Ben*_*oît 6

如果你不具备使用载体,你可能想尝试Boost.Multi_array.这是一个简短示例的链接.