<valarray>
The <valarray> header declares types and functions for operating on
arrays of numerical values. The intention is to provide types that could
be optimized on certain hardware platforms for computationally-intensive
programs. The consensus in the C++ user community seems to be that the
standard failed to live up to the intentions. Several other numerical
libraries, such as Blitz++ and MTL, provide high-performance matrix
solutions. (See Appendix B for more
information about Blitz++.) Most programs do not need <valarray>.
A valarray is a class template
that represents a one-dimensional array of numerical values. The array
can grow at runtime. All the arithmetic operators and mathematical
functions are overloaded to work with two valarray arguments or with a valarray and a scalar. You can also work with
parts of an array: slices, generalized slices, masks, and indirect
arrays.
A slice is a set of elements of a valarray, with a starting index, a count, and
a stride (an index interval). A generalized
slice (gslice)
lets the stride count and length vary, which can be used to implement
multidimensional arrays. A mask is a valarray of flags, in which the flags indicate
whether the corresponding item is part of the masked array. An
indirect array is an array of
indices. Each of these concepts is explained in this section.
The most important distinguishing feature of valarrays is that they do not allow aliasing,
that is, an object cannot be an element of more than one valarray. This ...