valarray vs. vector:为什么要引入valarray?

时间:2012-09-25 10:01:11

标签: c++ valarray

是的,这是has been asked before,答案是:

  

valarray s(值数组)旨在将Fortran的一些速度带入C ++。您不会生成valarray指针,因此编译器可以对代码进行假设并更好地进行优化。 (Fortran如此之快的主要原因是没有指针类型,因此没有指针别名。)

或:

  

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

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

valarrayvector类模板,因此,在实例化之前,它们甚至不会存在。 当然,vector<int>不会导致别名问题超过valarray<int>

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

2 个答案:

答案 0 :(得分:11)

分离关注? vectorvalarray解决了不同的问题。从标准引用,vector是(§23.3.6.1 [vector.overview] p1

  

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

valarray是(§26.6.2.1 [template.valarray.overview] p1

  

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

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

答案 1 :(得分:6)

  • valarray具有切片机制

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