valarray
课程与array
课程相同,请您解释一下我更喜欢valarray
优先于array
,反之亦然?
答案 0 :(得分:17)
valarray
已经在C ++ 03中,array
是C ++ 11中的新功能valarray
是可变长度,array
不是。valarray
专为数值计算而设计,可提供大量操作,包括+
,-
,*
,cos
,sin
等...... 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
代替。