1

Java と C++ のパフォーマンスの比較で、私たちの教授は、int * a = new int[NUM]std::vector よりもネイティブ配列 (のような動的配列) を選択しても利点はないと主張しました。彼女はまた、最適化されたベクトルはより高速になる可能性があると主張しましたが、その理由については教えてくれませんでした. ベクトルの背後にある魔法は何ですか?

パフォーマンスについてのみ回答してください。これは一般的な投票ではありません。

4

3 に答える 3

3

生の配列のような低レベルのものを含む超最適化されたコードは、std::vector. しかし、ベクトルを持つことの利点は、低レベルのコードから得られるわずかなパフォーマンスの向上よりもはるかに重要です。

  1. ベクトルはそれ自身のメモリを管理し、配列はメモリを管理するために覚えておく必要があります
  2. vector を使用すると、stdlib をより簡単に使用できます (動的配列を使用すると、終了 ptr を自分で追跡する必要があります)。これはすべて、よく書かれたよくテストされたコードです。
  3. qsort v std::sort のように vector の方が高速な場合もあります。この記事を読んでください。これが発生する理由は、より高いレベルのコードを書くことで、目前の問題についてより適切に推論できることが多いためです。
  4. std コンテナーは他のすべてに使用するのに適しているため、動的配列ではカバーされないため、コードのスタイルを統一することでコードが読みやすくなり、エラーが発生しにくくなります。

私が心に留めておくべきことの 1 つは、動的配列を と比較してはならないということstd::vectorです。これらは 2 つの異なるものです。残念ながら、おそらくc ++ 14にはならないようなものと比較する必要がありますstd::dynarray(boost prollyには1つあり、参照実装が横たわっていると確信しています)。実装によって、ネイティブstd::dynarray配列とパフォーマンスが異なる可能性はほとんどありません。

于 2013-11-11T23:05:56.353 に答える