Namensräume
Varianten
Aktionen

std::slice

Von cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
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.

1) Standardkonstruktor. Äquivalent zu slice(0, 0, 0). Dieser Konstruktor existiert nur, um die Konstruktion von Arrays von Slices zu ermöglichen.
2) Konstruiert einen neuen Slice mit den Parametern start, size, stride. Dieser Slice wird auf size Elemente verweisen, wobei jedes Element die Position hat
start + 0 * stride
start + 1 * stride
...
start + (size - 1) * stride
3) Konstruiert eine Kopie von other.

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) [edit]
generalisierter Slice eines Valarrays: Startindex, Satz von Längen, Satz von Schrittweiten
(class) [edit]
Proxy für eine Teilmenge eines Valarrays nach Anwendung eines Slices
(class template) [edit]
(C++23)
eine mehrdimensionale, nicht-besitzende Array-View
(Klassenvorlage) [edit]