web-dev-qa-db-ja.com

ベクトルのベクトルの初期化?

行列を初期化するのと同じ、迅速な方法でベクトルのベクトルを初期化する方法はありますか?

typedef int type;

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

vector<vector<type> > vectorMatrix;  //???
17
Eric

単一のベクトルの場合、次を使用できます。

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

これに基づいて、次を使用できます。

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);

c ++ 0x では、配列と同じ方法で標準コンテナを初期化できます。

7
sinek
std::vector<std::vector<int>> vector_of_vectors;

次に、追加する場合は、次の手順を使用できます。

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

または、次のようなことを行うことができます。

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

したがって、あなたの場合、あなたは言うことができるはずです:

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;
4
Brett

C++ 0xでは、matrixと同じ構文を使用できると思います。

C++ 03では、データを入力するために面倒なコードを作成する必要があります。 Boost.Assignは、次のテストされていないコードのようなものを使用して、それをいくらか単純化できる可能性があります。

#include <boost/assign/std/vector.hpp>

vector<vector<type> > v;
v += list_of(1)(0), list_of(0)(1);

あるいは

vector<vector<type> > v = list_of(list_of(1)(0))(list_of(0)(1));
3
Mike Seymour

マトリックスが完全に満たされている場合-

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;
..
.

更新:もっと良い方法があることがわかりました ここ

それ以外の場合、各行に可変数の要素がある場合(行列ではありません)-

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);
    }
}
2
Umang