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使用操作符[](返回对数据的引用而不进行边界检查)提供对其内容

向量与数组的问题已经被提出。 我的问题特别涉及C++11的情况。我一直在读一本书。这两本书都是比亚恩·斯特劳斯图普写的。在第一本书中,作者解释了数值计算应首选
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是“未完成的工作”