Common mathematical functions | |||||||||||||||||||||||||||||||
Mathematical special functions(C++17) | |||||||||||||||||||||||||||||||
Mathematical constants(C++20) | |||||||||||||||||||||||||||||||
Basic linear algebra algorithms(C++26) | |||||||||||||||||||||||||||||||
Data-parallel types (SIMD)(C++26) | |||||||||||||||||||||||||||||||
Floating-point environment(C++11) | |||||||||||||||||||||||||||||||
Complex numbers | |||||||||||||||||||||||||||||||
Numeric array (valarray ) | |||||||||||||||||||||||||||||||
Pseudo-random number generation | |||||||||||||||||||||||||||||||
Bit manipulation(C++20) | |||||||||||||||||||||||||||||||
Saturation arithmetic(C++26) | |||||||||||||||||||||||||||||||
Factor operations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Interpolations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Generic numeric operations | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
C-style checked integer arithmetic | |||||||||||||||||||||||||||||||
|
valarray<T>& operator=(const valarray<T>& other); | (1) | |
valarray<T>& operator=( valarray<T>&& other)noexcept; | (2) | (since C++11) |
valarray<T>& operator=(const T& val); | (3) | |
valarray<T>& operator=(conststd::slice_array<T>& other); | (4) | |
valarray<T>& operator=(conststd::gslice_array<T>& other); | (5) | |
valarray<T>& operator=(conststd::mask_array<T>& other); | (6) | |
valarray<T>& operator=(conststd::indirect_array<T>& other); | (7) | |
valarray<T>& operator=(std::initializer_list<T> il); | (8) | (since C++11) |
Replaces the contents of the numeric array.
size()
does not equal the length ofother or if any value on the left depends on the value on the right (e.g.v= v[v>2]).Contents |
other | - | another numeric array (or a mask) to assign |
val | - | the value to initialize each element with |
il | - | initializer list to assign |
*this
#include <iomanip>#include <iostream>#include <valarray> void print(constchar* rem,conststd::valarray<int>& v){std::cout<<std::left<<std::setw(36)<< rem<<std::right;for(int n: v)std::cout<<std::setw(3)<< n;std::cout<<'\n';} int main(){std::valarray<int> v1(3); v1=-1;// (3) from a scalar print("assigned from scalar: ", v1); v1={1,2,3,4,5,6};// (8): from initializer list of different size print("assigned from initializer_list:", v1); std::valarray<int> v2(3); v2= v1[std::slice(0,3,2)];// (4): from slice array print("every 2nd element starting at pos 0:", v2); v2= v1[v1%2==0];// (6): from mask array print("values that are even:", v2); std::valarray<std::size_t> idx={0,1,2,4};// index array v2.resize(4);// sizes must match when assigning from gen subscript v2= v1[idx];// (7): from indirect array print("values at positions 0, 1, 2, 4:", v2);}
Output:
assigned from scalar: -1 -1 -1assigned from initializer_list: 1 2 3 4 5 6every 2nd element starting at pos 0: 1 3 5values that are even: 2 4 6values at positions 0, 1, 2, 4: 1 2 3 5
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 624 | C++98 | the behaviors of overloads(4-7) were unclear if the length ofother is not size() | the behaviors are undefined in this case |
LWG 630 | C++98 | the behavior of the copy assignment operator was undefined ifsize()!= other.size() | resizes*this first in this case |
LWG 2071 | C++11 | the move assignment operator resized *this ifsize()!= other.size() | not required to resize in this case |