2017-04-24 13 views
5

ベクトル対valarrayの質問は既に質問されていますhere。 私の質問は、特にC++ 11の場合を指します。私は"A Tour of C++""The C++ Programming Language"を読んでいます。両方の本はBjarne Stroustrupによって書かれています。最初の本では、数値計算のためにstd::valarrayが好ましいと説明しています(第12章)。しかし、2番目の本の第29章では、著者はstd::vectorという用語でMatrixクラスを実装しています。C++ 11:数値計算には、valarrayまたはvectorを使用する必要があります。

また、googlingのビットを実行することによって、パフォーマンスに応じて、std::vectorは動的に割り当てられた「生の配列」と同じくらい速いと思われます。

C++ 11のコンテキストでは、数値計算にはどのコンテナを優先すべきですか?

この上の私のテイクは、あろうことstd::vectorは(何の境界チェックしないとデータへの参照を返す)operator[]を使用してそのコンテンツへの高速アクセスを提供し、それは、動的に割り当てられた配列上std::vectorを使用しても安全であるため、std::vectorが好ましいはずです。

  • std::vectorstd::vector::data()
  • STDを使用して、基礎となるデータへの直接アクセスを提供する::ベクトルはstd::vector::shrink_to_fit()
+1

としてライブラリを使用することを検討したい場合は、それにも関わらずv3 = sin(v2 + v1*3)

を行います。現代のC++世界では、std :: vectorはデフォルトのコンテナとして使用するべきではありません。 –

答えて

2

を使用して、より少ないメモリを使用するためにサイズ変更することができる。以降C++ 11からまた 、 valarrayは素敵なfunctionalityを持っていますので、要素的に数学的な関数を簡単に適用することができ、スライシング能力が向上します。たとえば、あなたは本当に、科学技術計算を行うなぜ測定し、速くなると思われるかどうかは検証されませんようにEigen

+1

私はEigen、Armadillo、MTL4、および他の多くのマトリックスライブラリを知っています。これらのライブラリの問題の1つは、ソースコードが完全に不透明であることです(言い換えれば、学習ツールとしては難しい、または自分で何かを変更したいと思った場合)。私の質問は、概念的にはもっと重要なことです。私の理解は、std :: valarrayは "未完成のビジネス" – BigONotation

関連する問題