std :: valarray和std :: array之间有什么区别

时间:2012-01-22 23:11:12

标签: c++ stdarray valarray

valarray课程与array课程相同,请您解释一下我更喜欢valarray优先于array,反之亦然?

3 个答案:

答案 0 :(得分:17)

  • valarray已经在C ++ 03中,array是C ++ 11中的新功能
  • valarray是可变长度,array不是。
  • valarray专为数值计算而设计,可提供大量操作,包括+-*cossin等...... array没有。
  • valarray有一个接口来检索数组的切片(子数组),array没有。

答案 1 :(得分:5)

std::valarray<T>相关的类模板旨在支持称为表达式模板的优化技术。我没有尝试这样做,但我的理解是规范并不是非常需要这个并且也没有真正支持这一点。一般来说,std::valarray<T>是一个相当专业的类,并没有真正广泛使用。另外,我认为支持std::valarray<T>的模板参数是一个有限的集合(例如数字内置类型)。

另一个std::array<T, n>是一个固定大小的数组,尽可能支持固定大小的普通容器接口。从本质上讲,std::array<T>T[n]的一种更方便使用的版本。

答案 2 :(得分:4)

valarray是一种动态数据结构,其大小可以在运行时更改,并执行动态分配。 array是一个静态数据结构,其大小在编译时确定(它也是一个聚合)。

不要使用valarray;只需使用vector代替。