【发布时间】:2012-01-22 23:11:11
【问题描述】:
valarray class 看起来与 array class 相同,你能解释一下我在哪里更喜欢 valarray 而不是 array 或反之亦然?
【问题讨论】:
-
它是
valarray,而不是vallaray。它们根本不是一回事,您可能不应该使用valarray,因为它的想法太糟糕以至于使它变得无用。array和vector之间的区别应该足够了。
valarray class 看起来与 array class 相同,你能解释一下我在哪里更喜欢 valarray 而不是 array 或反之亦然?
【问题讨论】:
valarray,而不是vallaray。它们根本不是一回事,您可能不应该使用valarray,因为它的想法太糟糕以至于使它变得无用。 array 和 vector 之间的区别应该足够了。
valarray 已经在 C++03 中,array 在 C++11 中是新的valarray 是可变长度,array 不是。valarray 专为数值计算而设计,提供大量运算,包括 +、-、*、cos、sin 等...array 没有。valarray 具有检索数组切片(子数组)的接口,array 没有。【讨论】:
array 和 array 与 vector en.cppreference.com/w/cpp/container/array 和 stackoverflow.com/questions/15079057/… 的链接
valarray 是一个动态数据结构,它的大小可以在运行时改变并且执行动态分配。 array 是一个静态数据结构,其大小在编译时确定(也是一个聚合)。
不过,不要使用valarray;只需使用 vector 代替。
【讨论】:
vector 为您提供所需的一切。
与std::valarray<T> 相关的类模板旨在支持称为表达式模板 的优化技术。我没有尝试这样做,但我的理解是规范并不完全要求这一点,也没有真正充分支持这一点。一般来说std::valarray<T> 是一个相当专业的类,它并没有被广泛使用。另外,我认为对std::valarray<T> 的模板参数支持是有限的(例如数字内置类型)。
另一方面std::array<T, n>是一个固定大小的数组,在固定大小的同时尽可能支持正常的容器接口。本质上,std::array<T> 是T[n] 的更方便使用的版本。
【讨论】: