C ++ 11:我应该使用valarray或vector进行数值计算

时间:2017-04-24 07:37:12

标签: c++11 valarray

向量与valarray的问题已经被问到here。 我的问题专门针对C ++ 11的情况。我一直在阅读"A Tour of C++""The C++ Programming Language"。这两本书都是由Bjarne Stroustrup撰写的。在第一本书中,作者解释说std::valarray应该是数值计算的首选(第12章)。但是在第二章的第29章中,作者用std::vector实现了一个Matrix类。

同样通过做一点googling,似乎在性能方面,std::vector与动态分配"原始数组"一样快。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

尽管如此,如果您真的想进行科学计算,请考虑使用Eigen

等库