Difference between revisions of "cpp/numeric/valarray"
(→Non-member functions: {{small}} -> {{dcl small}}) |
m (fmt) |
||
(42 intermediate revisions by 11 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|valarray}} | {{cpp/title|valarray}} | ||
− | {{cpp/numeric/valarray/ | + | {{cpp/numeric/valarray/navbar}} |
− | {{ddcl | header=valarray | | + | {{ddcl|header=valarray| |
− | template< class > | + | template< class T > |
class valarray; | class valarray; | ||
}} | }} | ||
− | {{ | + | {{tt|std::valarray}} is the class for representing and manipulating arrays of values. It supports element-wise mathematical operations and various forms of generalized subscript operators, slicing and indirect access. |
+ | |||
+ | ===Notes=== | ||
+ | {{tt|std::valarray}} and helper classes are defined to be free of certain forms of aliasing, thus allowing operations on these classes to be optimized similar to the effect of the keyword {{ltt|c/language/restrict}} in the C programming language. In addition, functions and operators that take {{tt|valarray}} arguments are allowed to return proxy objects to make it possible for the compiler to optimize an expression such as {{c|1=v1 = a * v2 + v3;}} as a single loop that executes {{c|1=v1[i] = a * v2[i] + v3[i];}} avoiding any temporaries or multiple passes. However, {{enwiki|expression templates}} make the same optimization technique available for any C++ container, and the majority of numeric libraries prefer expression templates to valarrays for flexibility. Some C++ standard library implementations use expression templates to implement efficient operations on {{tt|std::valarray}} (e.g. GNU libstdc++ and LLVM libc++). Only rarely are valarrays optimized any further, as in e.g. [https://software.intel.com/en-us/node/684140 Intel Integrated Performance Primitives]. | ||
+ | |||
+ | ===Template parameters=== | ||
+ | {{par begin}} | ||
+ | {{par|T|the type of the elements. The type must meet the {{named req|NumericType}} requirements}} | ||
+ | {{par end}} | ||
===Member types=== | ===Member types=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc hitem|Member type|Definition}} |
− | {{ | + | {{dsc|{{tt|value_type}}|{{tt|T}}}} |
− | {{ | + | {{dsc end}} |
===Member functions=== | ===Member functions=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc valarray}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc ~valarray}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc operator{{=}}}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc operator_at}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc operator_arith}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc operator_arith2}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc swap}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc size}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc resize}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc sum}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc min}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc max}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc shift}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc cshift}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc apply}} |
− | {{ | + | {{dsc end}} |
===Non-member functions=== | ===Non-member functions=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc swap2}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc begin2}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc end2}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc operator_arith3}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc operator_cmp}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc abs}} |
− | {{ | + | |
− | {{ | + | {{dsc h2|Exponential functions}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc exp}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc log}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc log10}} |
− | {{ | + | |
− | {{ | + | {{dsc h2|Power functions}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc pow}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc sqrt}} |
− | {{ | + | |
− | {{ | + | {{dsc h2|Trigonometric functions}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc sin}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc cos}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc tan}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc asin}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc acos}} |
+ | {{dsc inc|cpp/numeric/valarray/dsc atan}} | ||
+ | {{dsc inc|cpp/numeric/valarray/dsc atan2}} | ||
+ | |||
+ | {{dsc h2|Hyperbolic functions}} | ||
+ | {{dsc inc|cpp/numeric/valarray/dsc sinh}} | ||
+ | {{dsc inc|cpp/numeric/valarray/dsc cosh}} | ||
+ | {{dsc inc|cpp/numeric/valarray/dsc tanh}} | ||
+ | {{dsc end}} | ||
===Helper classes=== | ===Helper classes=== | ||
− | {{ | + | {{dsc begin}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc slice}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc slice_array}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc gslice}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc gslice_array}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc mask_array}} |
− | {{ | + | {{dsc inc|cpp/numeric/valarray/dsc indirect_array}} |
− | {{ | + | {{dsc end}} |
+ | |||
+ | ===[[cpp/numeric/valarray/deduction_guides|Deduction guides]]{{mark since c++17}}=== | ||
+ | |||
+ | ===See also=== | ||
+ | {{dsc begin}} | ||
+ | {{dsc inc|cpp/experimental/simd/dsc simd}} | ||
+ | {{dsc inc|cpp/experimental/simd/dsc simd_mask}} | ||
+ | {{dsc end}} | ||
+ | |||
+ | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} |
Latest revision as of 02:07, 4 October 2023
Defined in header <valarray>
|
||
template< class T > class valarray; |
||
std::valarray
is the class for representing and manipulating arrays of values. It supports element-wise mathematical operations and various forms of generalized subscript operators, slicing and indirect access.
Contents |
[edit] Notes
std::valarray
and helper classes are defined to be free of certain forms of aliasing, thus allowing operations on these classes to be optimized similar to the effect of the keyword restrict in the C programming language. In addition, functions and operators that take valarray
arguments are allowed to return proxy objects to make it possible for the compiler to optimize an expression such as v1 = a * v2 + v3; as a single loop that executes v1[i] = a * v2[i] + v3[i]; avoiding any temporaries or multiple passes. However, expression templates make the same optimization technique available for any C++ container, and the majority of numeric libraries prefer expression templates to valarrays for flexibility. Some C++ standard library implementations use expression templates to implement efficient operations on std::valarray
(e.g. GNU libstdc++ and LLVM libc++). Only rarely are valarrays optimized any further, as in e.g. Intel Integrated Performance Primitives.
[edit] Template parameters
T | - | the type of the elements. The type must meet the NumericType requirements |
[edit] Member types
Member type | Definition |
value_type
|
T
|
[edit] Member functions
constructs new numeric array (public member function) | |
destructs the numeric array (public member function) | |
assigns the contents (public member function) | |
get/set valarray element, slice, or mask (public member function) | |
applies a unary arithmetic operator to each element of the valarray (public member function) | |
applies compound assignment operator to each element of the valarray (public member function) | |
swaps with another valarray (public member function) | |
returns the size of valarray (public member function) | |
changes the size of valarray (public member function) | |
calculates the sum of all elements (public member function) | |
returns the smallest element (public member function) | |
returns the largest element (public member function) | |
zero-filling shift the elements of the valarray (public member function) | |
circular shift of the elements of the valarray (public member function) | |
applies a function to every element of a valarray (public member function) |
[edit] Non-member functions
(C++11) |
specializes the std::swap algorithm (function template) |
(C++11) |
overloads std::begin (function template) |
(C++11) |
specializes std::end (function template) |
applies binary operators to each element of two valarrays, or a valarray and a value (function template) | |
compares two valarrays or a valarray with a value (function template) | |
applies the function abs to each element of valarray (function template) | |
Exponential functions | |
applies the function std::exp to each element of valarray (function template) | |
applies the function std::log to each element of valarray (function template) | |
applies the function std::log10 to each element of valarray (function template) | |
Power functions | |
applies the function std::pow to two valarrays or a valarray and a value (function template) | |
applies the function std::sqrt to each element of valarray (function template) | |
Trigonometric functions | |
applies the function std::sin to each element of valarray (function template) | |
applies the function std::cos to each element of valarray (function template) | |
applies the function std::tan to each element of valarray (function template) | |
applies the function std::asin to each element of valarray (function template) | |
applies the function std::acos to each element of valarray (function template) | |
applies the function std::atan to each element of valarray (function template) | |
applies the function std::atan2 to a valarray and a value (function template) | |
Hyperbolic functions | |
applies the function std::sinh to each element of valarray (function template) | |
applies the function std::cosh to each element of valarray (function template) | |
applies the function std::tanh to each element of valarray (function template) |
[edit] Helper classes
BLAS-like slice of a valarray: starting index, length, stride (class) | |
proxy to a subset of a valarray after applying a slice (class template) | |
generalized slice of a valarray: starting index, set of lengths, set of strides (class) | |
proxy to a subset of a valarray after applying a gslice (class template) | |
proxy to a subset of a valarray after applying a boolean mask operator[] (class template) | |
proxy to a subset of a valarray after applying indirect operator[] (class template) |
[edit] Deduction guides(since C++17)
[edit] See also
(parallelism TS v2) |
data-parallel vector type (class template) |
(parallelism TS v2) |
data-parallel type with the element type bool (class template) |