std::valarray<T>:: operator[]
|
const
T
&
operator
[
]
(
std::
size_t
pos
)
const
;
|
(1) | |
|
T
&
operator
[
]
(
std::
size_t
pos
)
;
|
(2) | |
|
std::
valarray
<
T
>
operator
[
]
(
std::
slice
slicearr
)
const
;
|
(3) | |
|
std::
slice_array
<
T
>
operator
[
]
(
std::
slice
slicearr
)
;
|
(4) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
gslice
&
gslicearr
)
const
;
|
(5) | |
|
std::
gslice_array
<
T
>
operator
[
]
(
const
std::
gslice
&
gslicearr
)
;
|
(6) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
valarray
<
bool
>
&
boolarr
)
const
;
|
(7) | |
|
std::
mask_array
<
T
>
operator
[
]
(
const
std::
valarray
<
bool
>
&
boolarr
)
;
|
(8) | |
|
std::
valarray
<
T
>
operator
[
]
(
const
std::
valarray
<
std::
size_t
>
&
indarr
)
const
;
|
(9) | |
|
std::
indirect_array
<
T
>
operator
[
]
(
const
std::
valarray
<
std::
size_t
>
&
indarr
)
;
|
(10) | |
Récupérez des éléments individuels ou des parties du tableau.
Les surcharges const qui renvoient des séquences d'éléments créent un nouvel objet std::valarray . Les surcharges non- const renvoient des classes contenant des références aux éléments du tableau.
|
Si pos < size ( ) est false , le comportement est indéfini. |
(jusqu'à C++26) |
|
Si pos < size ( ) est false :
|
(depuis C++26) |
Table des matières |
Paramètres
| pos | - | position de l'élément à retourner |
| slicearr | - | slice des éléments à retourner |
| gslicearr | - | gslice des éléments à retourner |
| boolarr | - | masque des éléments à retourner |
| indarr | - | indices des éléments à retourner |
Valeur de retour
Exceptions
Peut lever des exceptions définies par l'implémentation.
Notes
Pour des valeurs appropriées de std::valarray a , b et des valeurs appropriées de std::size_t i , j , toutes les expressions suivantes sont toujours évaluées à true :
- Cela signifie que les éléments de std::valarray sont adjacents en mémoire.
- Cela signifie qu'il n'y a pas d'alias dans les éléments et cette propriété peut être utilisée pour effectuer certains types d'optimisation.
Les références deviennent invalides lors d'un
resize()
ou lorsque le tableau est détruit.
Pour les surcharges (3,5,7,9) , la fonction peut être implémentée avec un type de retour différent de std::valarray . Dans ce cas, le type de remplacement possède les propriétés suivantes :
-
- Toutes les fonctions membres const de std::valarray sont fournies.
- std::valarray , std::slice_array , std::gslice_array , std::mask_array et std::indirect_array peuvent être construits à partir du type de remplacement.
- Pour chaque fonction prenant un const std:: valarray < T > & sauf begin() et end() (depuis C++11) , des fonctions identiques prenant les types de remplacement doivent être ajoutées ;
- Pour chaque fonction prenant deux arguments const std:: valarray < T > & , des fonctions identiques prenant chaque combinaison de const std:: valarray < T > & et des types de remplacement doivent être ajoutées.
- Le type de retour n'ajoute pas plus de deux niveaux d'imbrication de templates par rapport au type d'argument le plus profondément imbriqué.
Les accès par tranche/masque/indices indirects ne se chaînent pas : v [ v == n ] [ std:: slice ( 0 , 5 , 2 ) ] = x ; est une erreur car std::mask_array (le type de v [ v == n ] ) ne possède pas operator [ ] .
Exemple
#include <cstddef> #include <iomanip> #include <iostream> #include <valarray> int main() { std::valarray<int> data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::cout << "Initial valarray: "; for (int n : data) std::cout << std::setw(3) << n; std::cout << '\n'; data[data > 5] = -1; // valarray<bool> overload of operator[] // the type of data > 5 is std::valarray<bool> // the type of data[data > 5] is std::mask_array<int> std::cout << "After v[v > 5] = -1:"; for (std::size_t n = 0; n < data.size(); ++n) std::cout << std::setw(3) << data[n]; // regular operator[] std::cout << '\n'; }
Sortie :
Initial valarray: 0 1 2 3 4 5 6 7 8 9 After v[v > 5] = -1: 0 1 2 3 4 5 -1 -1 -1 -1
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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 389 | C++98 |
le type de retour de la surcharge
(1)
était
T
|
corrigé en const T & |
| LWG 430 | C++98 |
le comportement était ambigu pour les surcharges
(3-10) si un sous-ensemble invalide était spécifié |
le comportement est
indéfini dans ce cas |