向量与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()
调整答案 0 :(得分:2)
valarray拥有漂亮的functionality,您可以轻松地按元素应用数学函数,并且您拥有更好的切片能力。你可以,例如做v3 = sin(v2 + v1*3)
尽管如此,如果您真的想进行科学计算,请考虑使用Eigen
等库