是的,这是has been asked before,答案是:
valarray
s(值数组)旨在将Fortran的一些速度带入C ++。您不会生成valarray
指针,因此编译器可以对代码进行假设并更好地进行优化。 (Fortran如此之快的主要原因是没有指针类型,因此没有指针别名。)
或:
valarray
也应该消除任何混叠的可能性[...]
但这些答案对我来说毫无意义。
valarray
和vector
是类模板,因此,在实例化之前,它们甚至不会存在。
当然,vector<int>
不会导致别名问题超过valarray<int>
。
鉴于此,valarray
的目的是什么,为什么他们不是简单地将相同的功能放入vector
呢?
答案 0 :(得分:11)
分离关注? vector
和valarray
解决了不同的问题。从标准引用,vector
是(§23.3.6.1 [vector.overview] p1
)
...支持随机访问迭代器的序列容器。此外,它支持(摊销)最后的恒定时间插入和擦除操作;在中间插入和擦除需要线性时间。存储管理是自动处理的,但可以提供提示以提高效率。
而valarray
是(§26.6.2.1 [template.valarray.overview] p1
)
...一维智能阵列,元素从零开始顺序编号。 它是一组有序值的数学概念的表示。更高维度的错觉可能是由熟悉的计算指数成语,以及广义下标运算符提供的强大的子集化能力产生的。
如您所见,它们有不同的用途。 vector
是广义动态数组,而valarray
表示一组值。它也不可调整,只能分配。
答案 1 :(得分:6)
valarray具有切片机制
预计valarray将使用表达式模板为其数值运算符实现