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

Meh*_*dad 6 c++ valarray

是的,之前已经问过,答案是:

valarrays(值数组)旨在将Fortran的一些速度带入C++.你不会做一个valarray指针,所以编译器可以对代码做出假设并更好地优化它.(Fortran速度如此之快的主要原因是没有指针类型,因此不存在指针别名.)

要么:

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

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

valarray并且vector是类模板,因此,它们在实例化之前甚至不存在.
当然,a vector<int>不会导致混叠问题valarray<int>.

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

Xeo*_*Xeo 11

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

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

而a valarray是一个(§26.6.2.1 [template.valarray.overview] p1)

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

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


APr*_*mer 6

  • valarray具有切片机制

  • valarray应该使用表达式模板为其数值运算符实现