web-dev-qa-db-ja.com

幅と高さを指定してオブジェクトの2Dベクトルのサイズを変更するにはどうすればよいですか?

私のクラスGameBoardには、クラスTileのオブジェクトの2Dベクトルであるメンバー変数があります。 GameBoardコンストラクターは、幅と高さをパラメーターとして受け取ります。

コンストラクタに渡された幅と高さに応じて、Tileオブジェクトの2Dベクトルのサイズを変更するにはどうすればよいですか?どのようにしてTileオブジェクトで埋めて、次のようなことができるようになりますか?

myVector[i][j].getDisplayChar();

スニペット

m_vvTiles.resize(iHeight);

for(auto it = m_vvTiles.begin(); it != m_vvTiles.end(); it++ ){

    (*it).resize(iWidth,Tile(' '));
}
13
Habit

外部ベクトルと内部ベクトルを別々にサイズ変更する必要があります。

myVector.resize(n);
for (int i = 0; i < n; ++i)
    myVector[i].resize(m);
22
Mark Ransom

2次元ベクトル(行列)のサイズを変更するために外部ループを作成する必要はありません。次の1行のresize()呼び出しを実行するだけです。

//vector<vector<int>> M;
//int m = number of rows, n = number of columns;
M.resize(m, vector<int>(n));

お役に立てば幸いです。

16
erol yeniaras

また、1行のコードを使用することもできます。

matrix.resize( row_count , vector<int>( column_count , initialization_value ) );

コードが繰り返し次元を変更し、行列が時々縮小している場合も、サイズを変更する前に、行列の古い状態をクリアします(2Dベクトル)

matrix.clear();
matrix.resize( row_count , vector<int>( column_count , initialization_value ) );

// we can create a 2D integer vector with 3 rows and 5 columns having "-1" as initial value by:
matrix.clear();
matrix.resize(3, vector<int> (5,-1));
11