6

是的,之前有人问过这个问题,答案是:

valarrays(值数组)旨在将 Fortran 的一些速度带入 C++。您不会制作 a valarrayof 指针,因此编译器可以对代码做出假设并更好地优化它。(Fortran 这么快的主要原因是没有指针类型,所以不能有指针别名。)

或者:

valarray还应该消除任何混叠的可能性 [...]

但这些答案对我来说毫无意义。

valarray并且vector类模板,因此,它们甚至在实例化之前都不存在。
当然, avector<int>不会引起混叠问题valarray<int>

鉴于此, 的目的是什么valarray,为什么他们不简单地将相同的功能放入其中vector

4

2 回答 2

11

关注分离?Avector和avalarray解决不同的问题。引用标准,avector是 ( §23.3.6.1 [vector.overview] p1)

...支持随机访问迭代器的序列容器。此外,它还支持(摊销)恒定时间的最后插入和擦除操作;在中间插入和擦除需要线性时间。存储管理是自动处理的,但可以给出提示以提高效率。

而 avalarray是 ( §26.6.2.1 [template.valarray.overview] p1)

... 一维智能数组,元素从零开始按顺序编号。它是一组有序值的数学概念的表示。更高维度的错觉可能是由计算索引的熟悉习语以及广义下标运算符提供的强大子集能力产生的。

如您所见,它们有不同的用途。Avector是一个广义动态数组,而 avalarray表示一组值。它也不能调整大小,只能分配。

于 2012-09-25T10:11:26.847 回答
6
  • valarray 有切片机制

  • valarray 预计将使用其数值运算符的表达式模板来实现

于 2012-09-25T10:07:12.137 回答