Namespaces
Variants

std:: slice

From cppreference.net
Definiert in Header <valarray>
class slice ;

std::slice ist die Selektor-Klasse, die eine Teilmenge von std::valarray identifiziert, ähnlich dem BLAS -Slice. Ein Objekt vom Typ std::slice enthält drei Werte: den Startindex, die Schrittweite und die Gesamtanzahl der Werte in der Teilmenge. Objekte vom Typ std::slice können als Indizes mit valarrays operator [ ] verwendet werden.

Inhaltsverzeichnis

Memberfunktionen

(constructor)
Konstruiert einen Slice
(öffentliche Elementfunktion)
start size stride
Gibt die Parameter des Slice zurück
(öffentliche Elementfunktion)

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. Entspricht slice ( 0 , 0 , 0 ) . Dieser Konstruktor existiert nur, um die Konstruktion von Slice-Arrays zu ermöglichen.
2) Konstruiert einen neuen Slice mit den Parametern start , size , stride . Dieser Slice verweist auf size Elemente, jedes mit der Position:
start + 0 * stride
start + 1 * stride
...
start + (size - 1) * stride
3) Erstellt 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
other - ein anderer zu kopierender Slice

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 Slice übergeben wurden - Start, Größe und Schrittweite.

Parameter

(keine)

Rückgabewert

Die Parameter des Slice - Start, Größe und Schrittweite.

Komplexität

Konstant.

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)

Überprüft, ob die Parameter von lhs und rhs - Start, Größe und Schrittweite jeweils gleich sind.

Diese Funktion ist für gewöhnliches unqualified oder qualified lookup nicht sichtbar und kann nur durch argument-dependent lookup gefunden werden, wenn std::slice eine assoziierte 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 ( )

Beispiel

Minimalistische Matrix-Klasse auf Basis von valarray mit einer Spur berechnenden Funktion.

#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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Applied to Behavior as published Correct behavior
LWG 543 C++98 es war unklar, ob ein standardmäßig konstruierter Slice verwendbar ist er ist verwendbar (als leere Teilmenge)

Siehe auch

Valarray-Element, -Slice oder -Maske abrufen/festlegen
(öffentliche Elementfunktion)
Generalisierter Slice eines valarray: Startindex, Menge von Längen, Menge von Schrittwerten
(Klasse)
Proxy für eine Teilmenge eines valarray nach Anwendung eines slice
(Klassentemplate)
(C++23)
Eine mehrdimensionale nicht-besitzende Array-Ansicht
(Klassentemplate)