Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/numeric/valarray"

From cppreference.com
< cpp‎ | numeric
(wording)
m (fmt)
 
(33 intermediate revisions by 11 users not shown)
Line 1: Line 1:
 
{{cpp/title|valarray}}
 
{{cpp/title|valarray}}
{{cpp/numeric/valarray/sidebar}}
+
{{cpp/numeric/valarray/navbar}}
{{ddcl | header=valarray |
+
{{ddcl|header=valarray|
 
template< class T >
 
template< class T >
 
class valarray;
 
class valarray;
 
}}
 
}}
  
{{cpp|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.
+
{{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===
 
===Notes===
{{cpp|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 {{tt|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 {{cpp|1=v1 = a*v2 + v3;}} as a single loop that executes {{cpp|1=v1[i] = a*v2[i] + v3[i];}} avoiding any temporaries or multiple passes. However, [[enwiki::Expression templates|expression templates]] make the same optimization technique available for any C++ container, and the majority of numeric libraries prefer expression templates to valarrays, which leads to very low demand for special compiler optimizations for valarrays, which in turn makes such optimizations rare. One example where valarrays are optimized is [http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/cref_cls/common/cppref_valarray_intro.htm Intel Parallel Studio].
+
{{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===
{{tdcl list begin}}
+
{{dsc begin}}
{{tdcl list hitem | Member type | Definition}}
+
{{dsc hitem|Member type|Definition}}
{{tdcl list item | {{tt|value_type}} | {{tt|T}}}}
+
{{dsc|{{tt|value_type}}|{{tt|T}}}}
{{tdcl list end}}
+
{{dsc end}}
  
 
===Member functions===
 
===Member functions===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list template | cpp/numeric/valarray/dcl list valarray}}
+
{{dsc inc|cpp/numeric/valarray/dsc valarray}}
{{dcl list template | cpp/numeric/valarray/dcl list ~valarray}}
+
{{dsc inc|cpp/numeric/valarray/dsc ~valarray}}
{{dcl list template | cpp/numeric/valarray/dcl list operator{{=}}}}
+
{{dsc inc|cpp/numeric/valarray/dsc operator{{=}}}}
{{dcl list template | cpp/numeric/valarray/dcl list operator_at}}
+
{{dsc inc|cpp/numeric/valarray/dsc operator_at}}
{{dcl list template | cpp/numeric/valarray/dcl list operator_unary}}
+
{{dsc inc|cpp/numeric/valarray/dsc operator_arith}}
{{dcl list template | cpp/numeric/valarray/dcl list operator_compound}}
+
{{dsc inc|cpp/numeric/valarray/dsc operator_arith2}}
{{dcl list template | cpp/numeric/valarray/dcl list swap}}
+
{{dsc inc|cpp/numeric/valarray/dsc swap}}
{{dcl list template | cpp/numeric/valarray/dcl list size}}
+
{{dsc inc|cpp/numeric/valarray/dsc size}}
{{dcl list template | cpp/numeric/valarray/dcl list resize}}
+
{{dsc inc|cpp/numeric/valarray/dsc resize}}
{{dcl list template | cpp/numeric/valarray/dcl list sum}}
+
{{dsc inc|cpp/numeric/valarray/dsc sum}}
{{dcl list template | cpp/numeric/valarray/dcl list min}}
+
{{dsc inc|cpp/numeric/valarray/dsc min}}
{{dcl list template | cpp/numeric/valarray/dcl list max}}
+
{{dsc inc|cpp/numeric/valarray/dsc max}}
{{dcl list template | cpp/numeric/valarray/dcl list shift}}
+
{{dsc inc|cpp/numeric/valarray/dsc shift}}
{{dcl list template | cpp/numeric/valarray/dcl list cshift}}
+
{{dsc inc|cpp/numeric/valarray/dsc cshift}}
{{dcl list template | cpp/numeric/valarray/dcl list apply}}
+
{{dsc inc|cpp/numeric/valarray/dsc apply}}
{{dcl list end}}
+
{{dsc end}}
  
 
===Non-member functions===
 
===Non-member functions===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list template | cpp/numeric/valarray/dcl list swap2}}
+
{{dsc inc|cpp/numeric/valarray/dsc swap2}}
{{dcl list template | cpp/numeric/valarray/dcl list begin2}}
+
{{dsc inc|cpp/numeric/valarray/dsc begin2}}
{{dcl list template | cpp/numeric/valarray/dcl list end2}}
+
{{dsc inc|cpp/numeric/valarray/dsc end2}}
{{dcl list template | cpp/numeric/valarray/dcl list operator_binary}}
+
{{dsc inc|cpp/numeric/valarray/dsc operator_arith3}}
{{dcl list template | cpp/numeric/valarray/dcl list operator_cmp}}
+
{{dsc inc|cpp/numeric/valarray/dsc operator_cmp}}
{{dcl list template | cpp/numeric/valarray/dcl list abs}}
+
{{dsc inc|cpp/numeric/valarray/dsc abs}}
  
{{dcl list h2 | Exponential functions}}
+
{{dsc h2|Exponential functions}}
{{dcl list template | cpp/numeric/valarray/dcl list exp}}
+
{{dsc inc|cpp/numeric/valarray/dsc exp}}
{{dcl list template | cpp/numeric/valarray/dcl list log}}
+
{{dsc inc|cpp/numeric/valarray/dsc log}}
{{dcl list template | cpp/numeric/valarray/dcl list log10}}
+
{{dsc inc|cpp/numeric/valarray/dsc log10}}
  
{{dcl list h2 | Power functions}}
+
{{dsc h2|Power functions}}
{{dcl list template | cpp/numeric/valarray/dcl list pow}}
+
{{dsc inc|cpp/numeric/valarray/dsc pow}}
{{dcl list template | cpp/numeric/valarray/dcl list sqrt}}
+
{{dsc inc|cpp/numeric/valarray/dsc sqrt}}
  
{{dcl list h2 | Trigonometric functions}}
+
{{dsc h2|Trigonometric functions}}
{{dcl list template | cpp/numeric/valarray/dcl list sin}}
+
{{dsc inc|cpp/numeric/valarray/dsc sin}}
{{dcl list template | cpp/numeric/valarray/dcl list cos}}
+
{{dsc inc|cpp/numeric/valarray/dsc cos}}
{{dcl list template | cpp/numeric/valarray/dcl list tan}}
+
{{dsc inc|cpp/numeric/valarray/dsc tan}}
{{dcl list template | cpp/numeric/valarray/dcl list asin}}
+
{{dsc inc|cpp/numeric/valarray/dsc asin}}
{{dcl list template | cpp/numeric/valarray/dcl list acos}}
+
{{dsc inc|cpp/numeric/valarray/dsc acos}}
{{dcl list template | cpp/numeric/valarray/dcl list atan}}
+
{{dsc inc|cpp/numeric/valarray/dsc atan}}
{{dcl list template | cpp/numeric/valarray/dcl list atan2}}
+
{{dsc inc|cpp/numeric/valarray/dsc atan2}}
  
{{dcl list h2 | Hyperbolic functions}}
+
{{dsc h2|Hyperbolic functions}}
{{dcl list template | cpp/numeric/valarray/dcl list sinh}}
+
{{dsc inc|cpp/numeric/valarray/dsc sinh}}
{{dcl list template | cpp/numeric/valarray/dcl list cosh}}
+
{{dsc inc|cpp/numeric/valarray/dsc cosh}}
{{dcl list template | cpp/numeric/valarray/dcl list tanh}}
+
{{dsc inc|cpp/numeric/valarray/dsc tanh}}
{{dcl list end}}
+
{{dsc end}}
  
 
===Helper classes===
 
===Helper classes===
{{dcl list begin}}
+
{{dsc begin}}
{{dcl list template | cpp/numeric/valarray/dcl list slice}}
+
{{dsc inc|cpp/numeric/valarray/dsc slice}}
{{dcl list template | cpp/numeric/valarray/dcl list slice_array}}
+
{{dsc inc|cpp/numeric/valarray/dsc slice_array}}
{{dcl list template | cpp/numeric/valarray/dcl list gslice}}
+
{{dsc inc|cpp/numeric/valarray/dsc gslice}}
{{dcl list template | cpp/numeric/valarray/dcl list gslice_array}}
+
{{dsc inc|cpp/numeric/valarray/dsc gslice_array}}
{{dcl list template | cpp/numeric/valarray/dcl list mask_array}}
+
{{dsc inc|cpp/numeric/valarray/dsc mask_array}}
{{dcl list template | cpp/numeric/valarray/dcl list indirect_array}}
+
{{dsc inc|cpp/numeric/valarray/dsc indirect_array}}
{{dcl list end}}
+
{{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) [edit]
destructs the numeric array
(public member function) [edit]
assigns the contents
(public member function) [edit]
get/set valarray element, slice, or mask
(public member function) [edit]
applies a unary arithmetic operator to each element of the valarray
(public member function) [edit]
applies compound assignment operator to each element of the valarray
(public member function) [edit]
swaps with another valarray
(public member function) [edit]
returns the size of valarray
(public member function) [edit]
changes the size of valarray
(public member function) [edit]
calculates the sum of all elements
(public member function) [edit]
returns the smallest element
(public member function) [edit]
returns the largest element
(public member function) [edit]
zero-filling shift the elements of the valarray
(public member function) [edit]
circular shift of the elements of the valarray
(public member function) [edit]
applies a function to every element of a valarray
(public member function) [edit]

[edit] Non-member functions

specializes the std::swap algorithm
(function template) [edit]
overloads std::begin
(function template) [edit]
specializes std::end
(function template) [edit]
applies binary operators to each element of two valarrays, or a valarray and a value
(function template) [edit]
compares two valarrays or a valarray with a value
(function template) [edit]
applies the function abs to each element of valarray
(function template) [edit]
Exponential functions
applies the function std::exp to each element of valarray
(function template) [edit]
applies the function std::log to each element of valarray
(function template) [edit]
applies the function std::log10 to each element of valarray
(function template) [edit]
Power functions
applies the function std::pow to two valarrays or a valarray and a value
(function template) [edit]
applies the function std::sqrt to each element of valarray
(function template) [edit]
Trigonometric functions
applies the function std::sin to each element of valarray
(function template) [edit]
applies the function std::cos to each element of valarray
(function template) [edit]
applies the function std::tan to each element of valarray
(function template) [edit]
applies the function std::asin to each element of valarray
(function template) [edit]
applies the function std::acos to each element of valarray
(function template) [edit]
applies the function std::atan to each element of valarray
(function template) [edit]
applies the function std::atan2 to a valarray and a value
(function template) [edit]
Hyperbolic functions
applies the function std::sinh to each element of valarray
(function template) [edit]
applies the function std::cosh to each element of valarray
(function template) [edit]
applies the function std::tanh to each element of valarray
(function template) [edit]

[edit] Helper classes

BLAS-like slice of a valarray: starting index, length, stride
(class) [edit]
proxy to a subset of a valarray after applying a slice
(class template) [edit]
generalized slice of a valarray: starting index, set of lengths, set of strides
(class) [edit]
proxy to a subset of a valarray after applying a gslice
(class template) [edit]
proxy to a subset of a valarray after applying a boolean mask operator[]
(class template) [edit]
proxy to a subset of a valarray after applying indirect operator[]
(class template) [edit]

[edit] Deduction guides(since C++17)

[edit] See also

(parallelism TS v2)
data-parallel vector type
(class template) [edit]
(parallelism TS v2)
data-parallel type with the element type bool
(class template) [edit]