2

私はいつもこれについて疑問に思っていました、そして今日、私はついに私が正しい答えを得る必要がある瞬間に来ました。

つまり、リスト/ベクター/をどのように保存すればよいか混乱していますか?動的に作成されたオブジェクトの?

たとえば、私はこのプログラムを持っています。このプログラムは、ファイル、接続に関するデータを読み取り、それに基づいてnode(接続情報を含む)オブジェクトを作成します。

したがって、問題は次のとおりです。ループで一時オブジェクトとそれらを作成するか、動的に割り当てられたsのポインタを使用しstd::vector<node>て、プログラムの最後でそれらを削除する必要がありますか?forpush_back()std::vector<node*>push_back()node

保存したい要素の数はあります。

あるいは、これを行うためのより良い方法があり、私はそれについて気づいていません。

4

3 に答える 3

3

ああ、あなたが既知のサイズを持っているなら...その既知のサイズであなたのベクトルを割り当ててください(ロード中のサイズ変更のオーバーヘッドを排除するために)、そしてロードはと同じくらい効率的memcpy()です。期待どおりに値をスタックします。ポインタの間接参照よりも効率が高い。

要素がポリモーフィックである場合は、ポインターが必要になります。メモリのクリーンアップが心配な場合は(そうする必要があります)、次の使用を検討してください:http ://www.boost.org/doc/libs/1_50_0/libs/ptr_container/doc/ptr_vector.html

[編集]

すべてが一定のサイズである場合は、http://www.boost.org/doc/libs/1_50_0/doc/html/array.htmlも検討してください。これはC配列に似ていますが、サイズ変更のオーバーヘッドとSTLサポートがありません...本当に速度が必要な場合。

于 2012-08-18T22:25:50.140 に答える
2

動的割り当てが絶対に必要でない場合は、使用しないでください。

于 2012-08-18T22:05:54.563 に答える
2

std::vector<node>そのシナリオで使用します。

必要なもののタイプ、サイズ、および要素数を事前に知っています。あなたが説明することはベクトルに最適です-あなたは連続した割り当てを扱っています。

一般に、の使用はstd::list非常にまれです。ベクトルは通常正しい選択です。

reserve()また、サイズがわかっている場合は、ポピュレーションの前に割り当てサイズを設定するために使用できることにも注意してください。これにより、再割り当てとノードのコピーを大幅に節約できます。

于 2012-08-18T22:17:22.610 に答える