vector と valarray の問題は、すでにここで質問されています。私の質問は、特に C++11 の場合に言及しています。「A Tour of C++」と「The C++ Programming Language」を読んでいます。どちらの本も、Bjarne Stroustrup によって書かれています。最初の本で、著者は、std::valarray
数値計算にはこれが好ましいと説明しています (第 12 章)。しかし、2 冊目の本の第 29 章では、著者は Matrix クラスを a の観点から実装していstd::vector
ます。
また、少しグーグルを行うことで、パフォーマンスに関しては、 astd::vector
は動的に割り当てられた「生の配列」と同じくらい高速であるようです。
では、C++11 のコンテキストでは、数値計算にはどのコンテナーを優先する必要がありますか?
これについての私の見解は、 (境界チェックなしでデータへの参照を返す)std::vector
を使用してコンテンツへの高速アクセスを提供し、動的に割り当てられた配列よりも安全であるため、優先する必要があるということです。また、C++11 以降:operator[]
std::vector
std::vector
std::vector
を使用して、基礎となるデータへの直接アクセスを提供しますstd::vector::data()
- std::vector を使用してメモリ使用量を減らすためにサイズを変更できます
std::vector::shrink_to_fit()