std::slice
| Definiert in der Header-Datei <valarray> |
||
| class slice; |
||
std::slice ist die Selektor-Klasse, die eine Teilmenge von std::valarray identifiziert, ähnlich wie ein BLAS-Slice. Ein Objekt vom Typ std::slice speichert drei Werte: den Startindex, den Schritt und die Gesamtzahl der Werte in der Teilmenge. Objekte vom Typ std::slice können als Indizes mit dem operator[] von valarray verwendet werden.
Inhalt |
[edit] Member-Funktionen
| (Konstruktor) |
konstruiert einen Slice (öffentliche Memberfunktion) |
| startsizestride |
gibt die Parameter des Slices zurück (öffentliche Memberfunktion) |
std::slice::slice
| slice() |
(1) | |
| slice( std::size_t start, std::size_t size, std::size_t stride ); |
(2) | |
| slice( const slice& other ); |
(3) | |
Konstruiert einen neuen Slice.
Parameter
| start | - | die Position des ersten Elements |
| size | - | die Anzahl der Elemente im Slice |
| stride | - | die Anzahl der Positionen zwischen aufeinanderfolgenden Elementen im Slice |
| Sonstiges | - | ein anderer Slice zum Kopieren |
std::slice::start, size, stride
| std::size_t start() const; |
(1) | |
| std::size_t size() const; |
(2) | |
| std::size_t stride() const; |
(3) | |
Gibt die Parameter zurück, die beim Konstruieren des Slices übergeben wurden – start, size und stride.
Parameter
(keine)
Rückgabewert
Die Parameter des Slices – start, size und stride.
Komplexität
Konstant.
[edit] Nicht-Member-Funktionen
| operator==(std::slice) (C++20) |
prüft, ob zwei Slices gleich sind (Funktion) |
operator==(std::slice)
| friend bool operator==( const slice& lhs, const slice& rhs ); |
(seit C++20) | |
Prüft, ob die Parameter von lhs und rhs – start, size und stride – gleich sind.
Diese Funktion ist für die normale unqualifizierte oder qualifizierte Suche nicht sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::slice eine zugehörige Klasse der Argumente ist.
Der Operator != wird aus operator== synthetisiert.
Parameter
| lhs, rhs | - | zu vergleichende Slices |
Rückgabewert
lhs.start() == rhs.start() && lhs.size() == rhs.size() && lhs.stride() == rhs.stride()
[edit] Beispiel
Eine einfache Matrixklasse, die auf valarray basiert und eine Funktion zur Berechnung der Spur hat.
#include <iostream> #include <valarray> class Matrix { std::valarray<int> data; int dim; public: Matrix(int r, int c) : data(r*c), dim(c) {} int& operator()(int r, int c) { return data[r * dim + c]; } int trace() const { return data[std::slice(0, dim, dim + 1)].sum(); } }; int main() { Matrix m(3, 3); int n = 0; for (int r = 0; r < 3; ++r) for (int c = 0; c < 3; ++c) m(r, c) = ++n; std::cout << "Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is " << m.trace() << '\n'; }
Ausgabe
Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is 15
[edit] Defect reports
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 543 | C++98 | Es war unklar, ob ein standardkonstruierter Slice verwendbar ist | Er ist verwendbar (als eine leere Teilmenge) |
[edit] Siehe auch
| liest/schreibt Array-Element, Slice oder Maske (public member function) | |
| generalisierter Slice eines Valarrays: Startindex, Satz von Längen, Satz von Schrittweiten (class) | |
| Proxy für eine Teilmenge eines Valarrays nach Anwendung eines Slices (class template) | |
| (C++23) |
eine mehrdimensionale, nicht-besitzende Array-View (Klassenvorlage) |