2017-02-15 9 views
-3

私のアプローチが正しいかどうかわからないので、確認してください。 私は2Dベクトルに個々のオブジェクトを追加しようとしています。これはコード:C++オブジェクトをベクトルに追加

std::vector<std::vector<*Tree>> treeVector(100); 

for (auto &j : treeVector) 
     j.assign(treeVector.size(), new Tree(0, 0)); 

Treeと呼ばれます。コードは機能しますが、ベクトルにオブジェクトが2倍になっているようですね。 何か不足していますか?

+1

実際には 'std :: vector >> treeVector(100);というように見えます。 –

+0

ポインタを格納してもよろしいですか? – juanchopanza

+0

わからない..私もポインタなしで試した。大きな違いはありません。しかしそれにもかかわらず。ポインタを使わなくても同じ問題が発生します。 –

答えて

2

ループは

for (auto &j : treeVector) 
    j.assign(treeVector.size(), new Tree(0, 0)); 

ツリーは、各反復で割り当てられ、構成されている唯一の

for (auto &j : treeVector) { 
    Tree *tmp = new Tree(0, 0); 
    j.assign(treeVector.size(), tmp); 
} 

に相当し、treeVectorの各要素(std::vector<Tree *>)は、意志に100のポインタたポイントを含みます同じオブジェクト。

for (auto &j : treeVector) { 
    for (int i=0; i<treeVector.szie(); ++i) 
    j.push_back(new Tree(0,0)); 
} 

そして、あなたは、メモリの管理に役立ちます、代わりにstd::unique_ptrを使用することがあります:

何が欲しいのかもしれません。

+0

とは何でしょうか? –

関連する問題