3

C++ で 3D ベクトルを開始しようとしています。最初は 100 x 100 x 1 にしたいのですが、問題が発生しています。(基本的には 2 次元であることはわかっていますが、後で z 軸ベクトルのサイズを変更します。)

ベクトルにポインターを含める必要があるエンティティーというクラスがあります。エンティティ ベクター ヘッダーを正しく含めましたが、まだ機能していません。これが私がやろうとしていることです:

vector <vector <vector <Entity* > > > matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)));

コンパイラが与えているエラーは、「数値定数の前に識別子が必要です」です。よく確認したところ、この行の前にセミコロンなどの抜けはありません。この行を削除すると、コードはきれいにコンパイルされます。

これは、関数定義の「private:」行の直後です。メンバー変数はコンストラクターを受け入れることができますか? 私もちょうど入れてみました

vector <vector <vector <Entity* > > > matrix;

.h ファイル内、および

matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)));

.cpp ファイルのコンストラクターで、それも機能しませんでした (呼び出しに一致せず、int から Entity* への無効な変換)

これの 3 次元「ベクトル」を宣言する最良の方法は何ですか (特にクラスで?)

ありがとう!

4

2 に答える 2

2

クラス コンストラクターで初期化する必要があります。

class MyClass
{
public:
    MyClass()
        : matrix (100, vector < vector < Entity* > > (100,vector<Entity*> (1, NULL)))
    {}

private:
    vector <vector <vector <Entity* > > > matrix;
};

個人的には、次の投稿で説明したように、行列にベクトルのベクトルを使用しません。

ベクトルのベクトルで表される行列の最初の列を取得します

それに似たアプローチを採用することをお勧めしますが、3D マトリックスに適合させます。基本的に、最初の 2 つの次元を長方形 (この場合は正方形) として扱い、それらの長方形を積み重ねて 3 番目の次元を作成します。3 次元のサイズを 10 要素に変更する場合は、100x100 のチャンクを 9 つ追加します。それは単一のベクトルのサイズ変更操作になります。

vector-vector-vector を使用して上記のサイズ変更を行う場合、10,000 回のベクトル サイズ変更操作を実行する必要があります。エレメント ストレージをヒープ全体に分散させ、キャッシュ ミスのためにパフォーマンスが低下します。

于 2013-05-15T22:52:06.387 に答える