10

vector vs valarray 的问题已经在这里被问过了。我的问题专门针对 C++11 的情况。我一直在阅读“C++ 之旅”“C++ 编程语言”。这两本书均由 Bjarne Stroustrup 撰写。在第一本书中,作者解释说它std::valarray应该是数值计算的首选(第 12 章)。但是在第二本书的第 29 章中,作者根据std::vector.

同样通过进行一些谷歌搜索,似乎在性能方面, astd::vector与动态分配的“原始数组”一样快。

那么在 C++11 的上下文中,数值计算应该首选哪个容器呢?

我对此的看法是,由于使用( 它返回对数据的引用而不进行边界检查)std::vector提供对其内容的快速访问,并且在动态分配的数组上使用 a 也更安全,因此应该首选。此外,从 C++11 开始:operator[]std::vectorstd::vector

  • std::vector使用提供对基础数据的直接访问std::vector::data()
  • std::vector 可以调整大小以使用更少的内存std::vector::shrink_to_fit()
4

1 回答 1

2

valarray 具有很好的功能,您可以轻松地按元素应用数学函数,并且您具有更好的切片能力。你可以例如做v3 = sin(v2 + v1*3)

不过,如果您真的想做科学计算,请考虑使用诸如Eigen之类的库

于 2017-04-24T10:29:12.033 回答