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) | |
Einzelne Elemente oder Teile des Arrays abrufen.
Die const -Überladungen, die Elementsequenzen zurückgeben, erstellen ein neues std::valarray -Objekt. Die Nicht- const -Überladungen geben Klassen zurück, die Referenzen auf die Array-Elemente halten.
|
Wenn pos < size ( ) false ist, ist das Verhalten undefiniert. |
(bis C++26) |
|
Wenn pos < size ( ) false ist:
|
(seit C++26) |
Inhaltsverzeichnis |
Parameter
| pos | - | Position des zurückzugebenden Elements |
| slicearr | - | slice der zurückzugebenden Elemente |
| gslicearr | - | gslice der zurückzugebenden Elemente |
| boolarr | - | Maske der zurückzugebenden Elemente |
| indarr | - | Indizes der zurückzugebenden Elemente |
Rückgabewert
Exceptions
Kann implementierungsdefinierte Ausnahmen auslösen.
Hinweise
Für korrekte std::valarray Werte a , b und korrekte std::size_t Werte i , j , evaluieren alle der folgenden Ausdrücke immer zu true :
- Dies bedeutet, dass std::valarray Elemente im Speicher aufeinanderfolgend angeordnet sind.
- Dies bedeutet, dass es keine Aliase in den Elementen gibt und diese Eigenschaft genutzt werden kann, um bestimmte Arten von Optimierungen durchzuführen.
Referenzen werden ungültig bei
resize()
oder wenn das Array zerstört wird.
Für Überladungen (3,5,7,9) kann die Funktion mit einem Rückgabetyp implementiert werden, der sich von std::valarray unterscheidet. In diesem Fall besitzt der Ersatztyp folgende Eigenschaften:
-
- Alle const Memberfunktionen von std::valarray werden bereitgestellt.
- std::valarray , std::slice_array , std::gslice_array , std::mask_array und std::indirect_array können aus dem Ersatztyp konstruiert werden.
- Für jede Funktion, die ein const std:: valarray < T > & außer begin() und end() (seit C++11) akzeptiert, müssen identische Funktionen hinzugefügt werden, die die Ersatztypen akzeptieren;
- Für jede Funktion, die zwei const std:: valarray < T > & Argumente akzeptiert, müssen identische Funktionen hinzugefügt werden, die jede Kombination von const std:: valarray < T > & und Ersatztypen akzeptieren.
- Der Rückgabetyp fügt nicht mehr als zwei Ebenen von Template-Verschachtelung über dem am tiefsten verschachtelten Argumenttyp hinzu.
Slice/Mask/Indirekte Indexzugriffe lassen sich nicht verketten: v [ v == n ] [ std:: slice ( 0 , 5 , 2 ) ] = x ; ist ein Fehler, weil std::mask_array (der Typ von v [ v == n ] ) keinen operator [ ] besitzt.
Beispiel
#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'; }
Ausgabe:
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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 389 | C++98 |
der Rückgabetyp von Überladung
(1)
war
T
|
korrigiert zu const T & |
| LWG 430 | C++98 |
das Verhalten war unklar für Überladungen
(3-10) wenn eine ungültige Teilmenge angegeben wird |
das Verhalten ist
in diesem Fall undefiniert |