ベクトルと配列: パフォーマンスの難題
C では、 std::vectors を優先して配列の使用が推奨されません。ただし、パフォーマンスの違いの程度については、しばしば疑問視されています。
C 配列の回避
現在のガイドラインでは、手動での追跡と制御が必要なため、新しく割り当てられた C 配列を避けることを推奨しています。削除。さらに、範囲チェックが行われず、ポインター変換中にサイズ情報が失われるため、スタック上で配列を使用することはお勧めできません。このような場合、サイズ関数とイテレータを提供する std::array が推奨されます。
std::Vector とネイティブ配列
経験的な調査結果により、基本的なインデックス付けは、ベクトルに対する逆参照およびインクリメント演算は、対応する配列/ポインターの演算と同様に実行されます。アセンブリ コード分析により、この同等性が確認されます (以下のコード スニペットを参照)。
int pointer_index(S &s) { return s.p[3]; } // Analogous to vector indexing int vector_index(S &s) { return s.v[3]; } // Same assembly code
int pointer_deref(S &s) { return *s.p; } // Analogous to iterator dereferencing int iterator_deref(S &s) { return *s.i; } // Identical assembly code
void pointer_increment(S &s) { ++s.p; } // Analogous to iterator increment void iterator_increment(S &s) { ++s.i; } // Same assembly code
例外: 新しく割り当てられた配列のパフォーマンス上の利点
1同等のパフォーマンスの例外は、非クラス オブジェクトまたはユーザー定義のないクラスを含む、新しく割り当てられた配列の場合です。コンストラクター。この場合、std::vector は構築時に要素をデフォルト値 (たとえば、int の場合は 0) に初期化するため、新しく割り当てられた配列は std::vector よりも有利です。
以上が`std::vector` が C の生の配列よりも優れているのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。