valarray
类看起来和array
类相似,您能解释一下我何时会优先选择valarray
而不是array
,或者反之亦然吗?
valarray
在 C++03 中已经存在,array
是 C++11 中的新特性。valarray
允许变长,但 array
不允许。valarray
专门为数值计算设计,并提供多种运算符,例如 +
、-
、*
、cos
、sin
等等。而 array
则没有这些功能。valarray
提供了获取数组切片(即子数组)的接口,array
没有此功能。array
和array
与vector
的链接:http://en.cppreference.com/w/cpp/container/array 和 https://dev59.com/_mUp5IYBdhLWcg3wvpYM。 - Reb.Cabinvalarray
是一种动态数据结构,其大小可以在运行时更改,并执行动态分配。而array
则是静态数据结构,其大小在编译时确定(并且它也是一个聚合体)。
虽然可以使用valarray
,但最好使用vector
代替。
vector
给您提供了所需的一切。 - Kerrek SBstd::valarray<T>
相关的类模板旨在支持称为表达式模板的优化技术。我尝试过这个,但我的理解是规范并不完全要求这样做,也没有充分支持这种技术。通常来说,std::valarray<T>
是一个相当专业化的类,不是很广泛地使用。此外,我认为std::valarray<T>
的模板参数支持是一组有限的集合(例如数字内置类型)。std::array<T, n>
是一个固定大小的数组,尽可能地支持普通容器接口(因为其大小是固定的)。实质上,std::array<T>
是T[n]
的更方便使用的版本。
valarray
,不是vallaray
。它们完全不同,你可能不应该使用valarray
,因为它非常不好用,几乎没什么用处。array
和vector
的区别就足够了。 - Alexandre C.