C++11 C++;11:我应该使用数组还是向量进行数值计算
向量与数组的问题已经被提出。 我的问题特别涉及C++11的情况。我一直在读一本书。这两本书都是比亚恩·斯特劳斯图普写的。在第一本书中,作者解释了数值计算应首选C++11 C++;11:我应该使用数组还是向量进行数值计算,c++11,valarray,C++11,Valarray,向量与数组的问题已经被提出。 我的问题特别涉及C++11的情况。我一直在读一本书。这两本书都是比亚恩·斯特劳斯图普写的。在第一本书中,作者解释了数值计算应首选std::valarray(第12章)。但是在第二本书的第29章中,作者用std::vector实现了一个矩阵类 另外,在性能方面,一个std::vector与动态分配的“原始数组”一样快 那么在C++11环境中,数值计算应该首选哪个容器呢 我的看法是,由于std::vector使用操作符[](返回对数据的引用而不进行边界检查)提供对其内容
std::valarray
(第12章)。但是在第二本书的第29章中,作者用std::vector
实现了一个矩阵类
另外,在性能方面,一个std::vector
与动态分配的“原始数组”一样快
那么在C++11环境中,数值计算应该首选哪个容器呢
我的看法是,由于std::vector
使用操作符[]
(返回对数据的引用而不进行边界检查)提供对其内容的快速访问,并且在动态分配的数组上使用std::vector
也更安全,因此应该首选std::vector
。
此外,从C++11开始:
使用std::vector
std::vector::data()
- 可以使用
std::vector::shrink_to_fit()
- valarray的优点是,您可以轻松地按元素应用数学函数,并且具有更好的切片能力。例如,您可以执行
v3=sin(v2+v1*3)
然而,如果你真的想做科学计算,考虑使用像
这样的库,为什么不测量和验证哪个更快呢?在现代C++世界中,STD::vector应该用作默认容器,除非我们有理由不这样做。我知道Eigen、犰狳、MTL4以及许多其他矩阵库。这些库的一个问题是它们的源代码完全不透明(换句话说,作为一个学习工具很难,或者如果我想自己改变一些东西的话)。我的问题也更多地是在概念的基础上提出的。我的理解是std::valarray是“未完成的工作”