フラグメントの2つのリストがあります。フラグメントそのもので、number1
とnumber2
がこの特定のタイプのフラグメントのメンバーです。
まず、フラグメントそのもの。あなたの説明が与えられた場合、特にあなたが持っている断片の数を事前に知らなければ、std::vector
を使用してください。 (あなたは何を述べていますか?)それはあなたのためにメモリの割り当てを行い、エラーの大幅な削減を大幅に上回ります。メンバーについては
、考えてみます。
struct frag_1
{
int numbers[2];
};
(。それはあなた(または私たちを導く可能性があるとして、また、より良い変数名を考える)「より良い」であると、より決定的な答えに)
私はあなたの使用のためにベクトル対配列を考慮したことに注意してください。後でいくつかのメンバーによっていくつかのフラグメントを検索する必要がある場合は、ある種のマッピングタイプがより適切かもしれません。すべてのフラグメントを読み込んでループするだけであれば、ほとんどの場合、通常はstd::vector
が問題ありません。
サイズ変更時の
std:vector
sのパフォーマンスに
:あなたがベクトルの最終的なサイズがわかっている場合は、事前にベクトルを知らせることができます。最終的なサイズがわからない場合、コンテナに関係なく、サイズ変更とメモリ割り当てはになる可能性があります。ほとんどのコンテナは、再割り当てが行われていても、O(n)のパフォーマンスが得られます。あなたが求めている質問と、他の投稿が暗示しているように見えるのは、resize
があなたのボトルネックになるということです。従って:のプロフィール。おそらく、ベクトルは仕事を完了させ、あなたがサイズ変更を気にしないほど速くそれを行います。ディスクから読み込む場合は、ディスクI/Oだけでもサイズ調整操作よりも大幅に優れているため、最適化がほとんど意味がありません。
* "私は、スタックオーバーフローや他の場所では、ベクトルが読み書きのための配列より高速であることを読んでいます。" *私はそのステートメントの真実性を疑う余地があります。最高でも、マイクロ最適化です。 – Thanatos
これはまったく間違っています。 :-) – Mehrdad
あなたは精巧にできますか?私はベクタが確かに速いというベンチマークをいくつか見た。 –