私はいくつかのデータ構造の並列実装を書いています。私は誰かが純粋なポインタとstd :: vectorの間のパフォーマンスの違いについて知っているかどうか調べたいと思います。信頼できるドキュメントを知っている場合は、URL /書籍名/何でも書いてください。ヒントは大歓迎!C++ std :: vector performance [参照が必要]
答えて
差は使用との実装です。
+1: 'std :: vector <>'は、*フレンドリーな*動的に割り当てられた配列です。 –
私は「歴史」の中でこの答えの開発を隠しましたが、最初の文章は私たちの大部分にとって十分であるはずです。 – Klaim
未チェックの演算子[]を使用して適切なサイズに変更することで、通常のポインタと同じ速さで高速にstd :: vectorを作成できます。現実には、ベクトルは、エクストラを使用することを選択しない限り、実行時ではなく、ポインタに対するコンパイル時の抽象化です。イテレータのデバッグ、自動的かつ安全なリソース管理など、安全ベクトルの提供が大幅に増えています。未処理のポインタを使用する理由はありません。
編集:私の参照は、あなたがベクトルの安全性を失うことを考慮する前に行ったプロファイリングの実行です。
this answer in a similar questionによれば、動的に割り当てられた配列の要素へのアクセスは、std::vector
とほぼ同じになります。その質問には良い分析があり、this one as wellにあります。
あなたには、いくつかの手で書かれた動的配列でstd::vector
を比較する意味場合はこちらを参照のいくつかのポイントは以下のとおりです。
- 挿入時にリサイズ要因が重要です。この係数は標準では規定されていませんが、通常は1.5または2の間であり、挿入操作で償却された一定時間を保証する必要があります。
- アロケータ:多くのパフォーマンスは、使用されている割り当てメカニズムに依存します。ポインタも同じです。
- 生ポインタでは発生しないを呼び出すと、境界チェックが
std::vector
に発生する可能性があります。
ポインタと 'std :: vector'の共通点は何ですか? – pmr
残念ながら私はこれについて何も知らないが、非常に良い、おそらく非常によくある質問のために+1: – Bojangles
どちらの種類のデータも保存することができます。どちらが速いのか分からないので私は尋ねる。 – Adam