Initialization of a vector of vectors?

后端 未结 4 1940
孤街浪徒
孤街浪徒 2020-12-15 06:17

Is there a way to initialize a vector of vectors in the same ,quick, manner as you initialize a matrix?

typedef int type;

type matrix[2][2]=
{
{1,0},{0,1}
         


        
相关标签:
4条回答
  • 2020-12-15 06:54

    For the single vector you can use following:

    typedef int type;
    type elements[] = {0,1,2,3,4,5,6,7,8,9};
    vector<int> vec(elements, elements + sizeof(elements) / sizeof(type) );
    

    Based on that you could use following:

    type matrix[2][2]=
    {
       {1,0},{0,1}
    };
    
    vector<int> row_0_vec(matrix[0], matrix[0] + sizeof(matrix[0]) / sizeof(type) );
    
    vector<int> row_1_vec(matrix[1], matrix[1] + sizeof(matrix[1]) / sizeof(type) );
    
    vector<vector<type> > vectorMatrix;
    vectorMatrix.push_back(row_0_vec);
    vectorMatrix.push_back(row_1_vec);
    

    In c++0x, you be able to initialize standard containers in a same way as arrays.

    0 讨论(0)
  • 2020-12-15 07:00

    If the matrix is completely filled -

    vector< vector<int> > TwoDVec(ROWS, vector<int>(COLS));
    //Returns a matrix of dimensions ROWS*COLS with all elements as 0
    //Initialize as -
    TwoDVec[0][0] = 0;
    TwoDVec[0][1] = 1;
    ..
    .
    

    Update : I found there's a better way here

    else if there are variable number of elements in each row(not a matrix) -

    vector< vector<int> > TwoDVec(ROWS);
    for(int i=0; i<ROWS; i++){
        while(there_are_elements_in_row[i]){           //pseudocode
            TwoDVec[i].push_back(element);
        }
    }
    
    0 讨论(0)
  • 2020-12-15 07:01
    std::vector<std::vector<int>> vector_of_vectors;
    

    then if you want to add, you can use this procedure:

    vector_of_vectors.resize(#rows); //just changed the number of rows in the vector
    vector_of_vectors[row#].push_back(someInt); //this adds a column
    

    Or you can do something like this:

    std::vector<int> myRow;
    myRow.push_back(someInt);
    vector_of_vectors.push_back(myRow);
    

    So, in your case, you should be able to say:

    vector_of_vectors.resize(2);
    vector_of_vectors[0].resize(2);
    vector_of_vectors[1].resize(2);
    for(int i=0; i < 2; i++)
     for(int j=0; j < 2; j++)
       vector_of_vectors[i][j] = yourInt;
    
    0 讨论(0)
  • 2020-12-15 07:07

    In C++0x, I think you can use the same syntax as for your matrix.

    In C++03, you have to write some tedious code to populate it. Boost.Assign might be able to simplify it somewhat, using something like the following untested code:

    #include <boost/assign/std/vector.hpp>
    
    vector<vector<type> > v;
    v += list_of(1)(0), list_of(0)(1);
    

    or even

    vector<vector<type> > v = list_of(list_of(1)(0))(list_of(0)(1));
    
    0 讨论(0)
提交回复
热议问题