Namespaces
Variants

std::valarray<T>:: operator=

From 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 reçoit 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 non spécifiée après cette opération. La complexité de cette opération peut être linéaire si T possède 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'indirection 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 d'une valeur à droite (par exemple v = v [ v > 2 ] ).
8) Affecte le contenu de la liste d'initialisation il . Équivalent à * this = valarray ( il ) .

Table des matières

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

#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