2010-11-25 12 views
2

私はいくつかのデータ構造の並列実装を書いています。私は誰かが純粋なポインタとstd :: vectorの間のパフォーマンスの違いについて知っているかどうか調べたいと思います。信頼できるドキュメントを知っている場合は、URL /書籍名/何でも書いてください。ヒントは大歓迎!C++ std :: vector performance [参照が必要]

+1

ポインタと 'std :: vector'の共通点は何ですか? – pmr

+0

残念ながら私はこれについて何も知らないが、非常に良い、おそらく非常によくある質問のために+1: – Bojangles

+0

どちらの種類のデータも保存することができます。どちらが速いのか分からないので私は尋ねる。 – Adam

答えて

5

差は使用の実装です。

+2

+1: 'std :: vector <>'は、*フレンドリーな*動的に割り当てられた配列です。 –

+0

私は「歴史」の中でこの答えの開発を隠しましたが、最初の文章は私たちの大部分にとって十分であるはずです。 – Klaim

3

未チェックの演算子[]を使用して適切なサイズに変更することで、通常のポインタと同じ速さで高速にstd :: vectorを作成できます。現実には、ベクトルは、エクストラを使用することを選択しない限り、実行時ではなく、ポインタに対するコンパイル時の抽象化です。イテレータのデバッグ、自動的かつ安全なリソース管理など、安全ベクトルの提供が大幅に増えています。未処理のポインタを使用する理由はありません。

編集:私の参照は、あなたがベクトルの安全性を失うことを考慮する前に行ったプロファイリングの実行です。

0

あなたには、いくつかの手で書かれた動的配列でstd::vectorを比較する意味場合はこちらを参照のいくつかのポイントは以下のとおりです。

  • 挿入時にリサイズ要因が重要です。この係数は標準では規定されていませんが、通常は1.5または2の間であり、挿入操作で償却された一定時間を保証する必要があります。
  • アロケータ:多くのパフォーマンスは、使用されている割り当てメカニズムに依存します。ポインタも同じです。
  • 生ポインタでは発生しない​​を呼び出すと、境界チェックがstd::vectorに発生する可能性があります。
+0

りんごとリンゴの比較を行う場合は、サイズ変更係数は関係ありません。生の配列は正面からサイズを決めなければならないので、おそらく 'vector'で同じことをするでしょう。 – jalf

+0

@ jalf:「純粋なポインタ」が意味することは本当に明確ではないので、ロックされていないボックスを比較して、何らかの不特定のリンゴに似ています。 –

+0

@ jalf:私は彼が何かを 'vector'と比較すると、ダイナミックリサイズが必須であると思いました。動的なサイズ変更が必要ない場合は、とにかく 'std :: array'を使うべきです。 – pmr