std::valarray<T>::operator=
Depuis fr.cppreference.net
valarray<T>& operator=( const valarray<T>& other );
|
(1) | |
valarray<T>& operator=( valarray<T>&& other ) noexcept;
|
(2) | (depuis C++11) |
valarray<T>& operator=( const T& val );
|
(3) | |
valarray<T>& operator=( const std::slice_array<T>& other );
|
(4) | |
valarray<T>& operator=( const std::gslice_array<T>& other );
|
(5) | |
valarray<T>& operator=( const std::mask_array<T>& other );
|
(6) | |
valarray<T>& operator=( const std::indirect_array<T>& other );
|
(7) | |
valarray<T>& operator=( std::initializer_list<T> il );
|
(8) | (depuis C++11) |
Remplace le contenu du tableau numérique.
1) Opérateur d'affectation par copie. Si
size() != other.size(), redimensionne d'abord *this comme par resize(other.size()). Chaque élément de *this se voit affecter la valeur de l'élément correspondant de other.2) Opérateur d'affectation par déplacement. Remplace le contenu de
*this par celui de other. La valeur de other est indéterminée après cette opération. La complexité de cette opération peut être linéaire si T a des destructeurs non triviaux, mais est généralement constante sinon.3) Remplace chaque valeur dans
*this par une copie de val.4-7) Remplace le contenu de
*this par le résultat d'une opération d'indiçage généralisée. Le comportement est indéfini si size() n'est pas égal à la longueur de other ou si une valeur à gauche dépend de la valeur à droite (par exemple v = v[v > 2]).8) Assigne le contenu de la liste d'initialisation
il. Équivalent à *this = valarray(il).Paramètres
| other | - | un autre tableau numérique (ou un masque) à assigner |
| val | - | la valeur pour initialiser chaque élément |
| il | - | liste d'initialisation à assigner |
Valeur de retour
* this
Exceptions
1,3-8)
Peut lever des exceptions définies par l'implémentation.
Exemple
Exécuter ce code
#include <iomanip> #include <iostream> #include <valarray> void print(const char* rem, const std::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) à partir d'un scalaire print("assigné à partir d'un scalaire : ", v1); v1 = {1, 2, 3, 4, 5, 6}; // (8) : à partir d'une liste d'initialisation de taille différente print("assigné à partir d'initializer_list :", v1); std::valarray<int> v2(3); v2 = v1[std::slice(0, 3, 2)]; // (4) : à partir d'un tableau de tranche print("chaque 2ème élément commençant à la position 0 :", v2); v2 = v1[v1 % 2 == 0]; // (6) : à partir d'un tableau de masque print("valeurs paires :", v2); std::valarray<std::size_t> idx = {0, 1, 2, 4}; // tableau d'indices v2.resize(4); // les tailles doivent correspondre lors de l'assignation depuis un indice générique v2 = v1[idx]; // (7) : à partir d'un tableau indirect print("valeurs aux positions 0, 1, 2, 4 :", v2); }
Sortie :
assigné à partir d'un scalaire : -1 -1 -1 assigné à partir d'initializer_list : 1 2 3 4 5 6 chaque 2ème élément commençant à la position 0 : 1 3 5 valeurs paires : 2 4 6 valeurs aux positions 0, 1, 2, 4 : 1 2 3 5
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement tel que publié | Comportement correct |
|---|---|---|---|
| LWG 624 | C++98 |
les comportements des surcharges
(4-7)
étaient
peu clairs si la longueur de other n'est pas
size()
|
les comportements sont
indéfinis dans ce cas |
| LWG 630 | C++98 |
le comportement de l'opérateur d'affectation par copie
était indéfini si size ( ) ! = other. size ( ) |
redimensionne
*
this
d'abord dans ce cas |
| LWG 2071 | C++11 |
l'opérateur d'affectation par déplacement redimensionnait
* this si size ( ) ! = other. size ( ) |
non requis de
redimensionner dans ce cas |