2011-11-10 4 views
3

私はベクトルの最後に2回ずつ要素を挿入する必要があります。この関数はより速いpush_backで、C++で挿入します

私は、vector.insert(iter_first、iter_second)を行う方がvector.push_back(最初)、次にvector.push_back(second)より高速かどうか疑問に思っていましたか?

たぶん、別の代替では、このような構造体を作成するために、次のようになります。

struct T{int a; int b;}; 
T t; 
t.a = first; 
t.b = second; 
X.push_back(t); 
+9

あなたに影響を及ぼすことはありません。進む。 –

+0

あなたのデータが少し速いかもしれないと言うことに基づいてデータを構造化すべきではありません。意味をなさないものを使う。これらの2つの値の形式が論理的にまとまっている場合、潜在的なパフォーマンスの影響にかかわらず、構造体として意味をなす可能性があります。 – delnan

+4

プロフィールと参照してください! –

答えて

6

二つの要素が論理的に関連している場合、あなたは、構造体やクラスを使用します。関係がない場合は、パフォーマンス上の理由からグループ化しないでください。

これは早すぎる最適化の匂いがします。代わりに、メンテナンスのために最も明確なコードを書いて、コンパイラにコードを生成させてください。それがそこにあるのです。読みやすいコードは保守が容易で、保守しやすいコードはリファクタリングが容易で、誤解のために微妙なパフォーマンスのバグを起こす可能性は低いと考えてください。

0

ベクトルの最後に挿入すると、ベクトルの中央または先頭に挿入するよりもはるかに高速になります。あなたはベクトル、および/またはあなたのオブジェクトのコピーコンストラクタを持っている場合

これが唯一の問題信じられないほど痛みを伴うだろう。

0

事実上、push_backinsertを呼び出すので、 push_backを呼び出すと、二回二回insertを呼び出して終了します。しかし、実際には、 のコードが最適化されていれば、 という違いがあれば驚くでしょう。論理的なことを行い、後で のパフォーマンス上の問題がある場合は最適化してください。

関連する問題