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
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 |