1

Vector にメモリを動的に割り当てる方法は?

vector<Point> vInPts;// My Input Vector - (サイズ 6 の) いくつかの値をダンプしました

// 入力ベクトル ポイントに対して何らかの計算を行う

vector<Point> vOutPts;// この出力ベクトルにメモリを動的に割り当てる方法 Points

4

3 に答える 3

4

ベクトル自体を動的に割り当てる必要はない可能性があります。内部的には、ベクトルは要素を動的に格納するために必要なメモリを割り当て、このメモリを管理します。したがって、自動ストレージでベクトルを宣言するだけです。

 vector<Point> vOutPts;

std::vector::reserveを呼び出すことで、事前に決められた量のメモリをベクターに割り当てることができます。

ベクトルを動的に割り当てる必要がある場合は、メモリ管理についてすべて理解していることを確認し、スマートポインターRAIIを読んでください。

于 2013-04-17T07:02:50.683 に答える
2

必要なサイズがわかっている場合は、次のように十分な要素を割り当てて初期化できます。

vOutPts.resize(size);

または、そのサイズで作成できます。

vector<Point> vOutPts(size);

それ以外の場合は、ベクトルを一度に 1 要素ずつ成長させることができます。

vOutPts.push_back(some_point);

プッシュする要素の数が (大まかに) わかっている場合は、要素を初期化せずに、事前にメモリを割り当てることで、もう少し効率的にすることができます。

vOutPts.reserve(approx_size);
于 2013-04-17T07:06:04.967 に答える
0

こちらです

vector <Point> *myvect= new vector<Point>()

ただし、電話することを忘れないでください。

delete myvect

使い終わったら、漏れが発生します。

このようにベクトル自体を割り当てることは、ベクトルの内容を動的に割り当てることと同じではないことに注意してください。このベクトル自体の動的割り当ては、たとえば、関数内でベクトルを作成し、参照によって返す場合にのみ実行する必要があります。自動メモリ管理は、オブジェクトを動的に割り当てるよりも扱いやすく、エラーが発生しにくく、何よりも安全です...したがって、必要がないときはいつでも、この動的割り当てを避ける必要があります

于 2013-04-17T07:01:55.853 に答える