std::valarray和std::array有什么区别?

19

valarray类看起来和array类相似,您能解释一下我何时会优先选择valarray而不是array,或者反之亦然吗?


1
请参阅https://dev59.com/cXI-5IYBdhLWcg3w8dUQ。 - johnsyweb
1
这里指的是 valarray,不是 vallaray。它们完全不同,你可能不应该使用 valarray,因为它非常不好用,几乎没什么用处。arrayvector 的区别就足够了。 - Alexandre C.
3个回答

23
  • valarray 在 C++03 中已经存在,array 是 C++11 中的新特性。
  • valarray 允许变长,但 array 不允许。
  • valarray 专门为数值计算设计,并提供多种运算符,例如 +-*cossin 等等。而 array 则没有这些功能。
  • valarray 提供了获取数组切片(即子数组)的接口,array 没有此功能。

虽然所有的答案都很好,每个答案都有我不知道的东西,但我不知道该接受哪一个。所以感谢大家! - codekiddy
请允许我添加一些关于arrayarrayvector的链接:http://en.cppreference.com/w/cpp/container/array 和 https://dev59.com/_mUp5IYBdhLWcg3wvpYM。 - Reb.Cabin

6

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

虽然可以使用valarray,但最好使用vector代替。


1
@zhermes:嗯,也许可以查看这个问题以获取一些背景信息。基本上,标准算法和 vector 给您提供了所需的一切。 - Kerrek SB

6
std::valarray<T>相关的类模板旨在支持称为表达式模板的优化技术。我尝试过这个,但我的理解是规范并不完全要求这样做,也没有充分支持这种技术。通常来说,std::valarray<T>是一个相当专业化的类,不是很广泛地使用。此外,我认为std::valarray<T>的模板参数支持是一组有限的集合(例如数字内置类型)。
另一方面,std::array<T, n>是一个固定大小的数组,尽可能地支持普通容器接口(因为其大小是固定的)。实质上,std::array<T>T[n]的更方便使用的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接