std::vector は配列と同様に動作すると一般に信じられていますが、最近のテストではこの概念に疑問が投げかけられています。この記事では、std::vector 配列とプレーン配列のパフォーマンスの違いを調べ、その根本的な理由を明らかにします。
テストを実施するために、大きな配列の作成と変更を繰り返し行うベンチマークが実装されました。ピクセル オブジェクトの。テストは、std::vector とプレーンな配列をシミュレートする生のポインターの 2 つの実装を使用して実行されました。
初期の結果では、std::vector がプレーンな配列よりも約 3 ~ 4 倍遅いという、重大なパフォーマンスのギャップが明らかになりました。
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
この驚くべき発見により、コードを詳しく調べることになりました。明らかなパフォーマンスの違いは、ベクター内の要素を変更するには 2 回アクセスする必要があるという事実に起因していることが判明しました。1 回目はベクターのサイズ変更で、もう 1 回は要素の初期化です。
それぞれを初期化するベクター実装を最適化することで、
UseVector completed in 2.216 seconds
この改訂されたパフォーマンスは、プレーン配列のパフォーマンスと同等になりました。観察されたわずかな違いは、基礎となるデータ構造とは関係のない要因に起因する可能性があることに注意することが重要です。
結論として、std::vector は便利で汎用性の高いデータ構造ですが、そのパフォーマンスは要因によって影響を受ける可能性があります。要素が初期化されアクセスされる方法など。パフォーマンスが重要な場合は、特定の要件を慎重に検討し、プレーン配列や他のデータ構造などの代替オプションを検討することが賢明です。
以上がstd::vector とプレーン配列: パフォーマンスが本当に重要になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。