std::valarray 和 std::array 有啥区别
Posted
技术标签:
【中文标题】std::valarray 和 std::array 有啥区别【英文标题】:What is the difference between std::valarray and std::arraystd::valarray 和 std::array 有什么区别 【发布时间】:2012-01-22 23:11:11 【问题描述】:valarray
class 看起来与 array
class 相同,你能解释一下我在哪里更喜欢 valarray
而不是 array
或反之亦然?
【问题讨论】:
见***.com/questions/1602451/c-valarray-vs-vector 它是valarray
,而不是vallaray
。它们根本不是一回事,您可能不应该使用valarray
,因为它的想法太糟糕以至于使它变得无用。 array
和 vector
之间的区别应该足够了。
【参考方案1】:
valarray
已经在 C++03 中,array
在 C++11 中是新的
valarray
是可变长度,array
不是。
valarray
专为数值计算而设计,提供大量运算,包括 +
、-
、*
、cos
、sin
等...array
没有。
valarray
具有检索数组切片(子数组)的接口,array
没有。
【讨论】:
虽然所有答案都很好,而且每个答案都有更多我不知道该接受哪个答案。非常感谢你们!。 请允许我添加一些关于array
和 array
与 vector
en.cppreference.com/w/cpp/container/array 和 ***.com/questions/15079057/… 的链接【参考方案2】:
valarray
是一个动态数据结构,它的大小可以在运行时改变并且执行动态分配。 array
是一个静态数据结构,其大小在编译时确定(也是一个聚合)。
不过,不要使用valarray
;只需使用 vector
代替。
【讨论】:
@zhermes:嗯,也许是check this question 了解一些背景信息。本质上,标准算法和vector
为您提供所需的一切。【参考方案3】:
与std::valarray<T>
相关的类模板旨在支持称为表达式模板 的优化技术。我没有尝试这样做,但我的理解是规范并不完全要求这一点,也没有真正充分支持这一点。一般来说std::valarray<T>
是一个相当专业的类,它并没有被广泛使用。另外,我认为对std::valarray<T>
的模板参数支持是有限的(例如数字内置类型)。
另一方面std::array<T, n>
是一个固定大小的数组,在固定大小的同时尽可能支持正常的容器接口。本质上,std::array<T>
是T[n]
的更方便使用的版本。
【讨论】:
以上是关于std::valarray 和 std::array 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
将 std::vector 分配给 std::valarray
std::valarray 的添加具有不同的大小和不同的操作数顺序