Namespaces
Variants

std:: slice

From cppreference.net
Definido en el encabezado <valarray>
class slice ;

std::slice es la clase selector que identifica un subconjunto de std::valarray similar al segmento BLAS . Un objeto de tipo std::slice contiene tres valores: el índice inicial, el intervalo (stride) y el número total de valores en el subconjunto. Los objetos de tipo std::slice pueden utilizarse como índices con el operador [ ] de valarray.

Contenidos

Funciones miembro

(constructor)
construye un slice
(función miembro pública)
start size stride
devuelve los parámetros del slice
(función miembro pública)

std::slice:: slice

slice ( )
(1)
slice ( std:: size_t start, std:: size_t size, std:: size_t stride ) ;
(2)
slice ( const slice & other ) ;
(3)

Construye un nuevo slice.

1) Constructor por defecto. Equivalente a slice ( 0 , 0 , 0 ) . Este constructor existe solo para permitir la construcción de arrays de slices.
2) Construye un nuevo slice con los parámetros start , size , stride . Este slice hará referencia a size número de elementos, cada uno con la posición:
start + 0 * stride
start + 1 * stride
...
start + (size - 1) * stride
3) Construye una copia de other .

Parámetros

start - la posición del primer elemento
size - el número de elementos en el slice
stride - el número de posiciones entre elementos sucesivos en el slice
other - otro slice a copiar

std::slice:: start, size, stride

std:: size_t start ( ) const ;
(1)
std:: size_t size ( ) const ;
(2)
std:: size_t stride ( ) const ;
(3)

Devuelve los parámetros pasados al slice durante la construcción - inicio, tamaño y paso respectivamente.

Parámetros

(ninguno)

Valor de retorno

Los parámetros del slice -- inicio, tamaño y paso respectivamente.

Complejidad

Constante.

Funciones no miembro

operator== (std::slice)
(C++20)
verifica si dos segmentos son iguales
(función)

operator== (std::slice)

friend bool operator == ( const slice & lhs, const slice & rhs ) ;
(desde C++20)

Comprueba si los parámetros de lhs y rhs - inicio, tamaño y paso son iguales respectivamente.

Esta función no es visible para la búsqueda no calificada ordinaria o búsqueda calificada , y solo puede ser encontrada mediante búsqueda dependiente de argumentos cuando std::slice es una clase asociada de los argumentos.

El operador != es sintetizado a partir de operator== .

Parámetros

lhs, rhs - slices a comparar

Valor de retorno

lhs. start ( ) == rhs. start ( ) && lhs. size ( ) == rhs. size ( ) && lhs. stride ( ) == rhs. stride ( )

Ejemplo

Clase Matrix básica respaldada por valarray con una función de cálculo de traza .

#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';
}

Salida:

Trace of the matrix (1,2,3) (4,5,6) (7,8,9) is 15

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 543 C++98 no estaba claro si un slice construido por defecto es utilizable es utilizable (como un subconjunto vacío)

Véase también

obtener/establecer elemento, segmento o máscara de valarray
(función miembro pública)
segmento generalizado de un valarray: índice inicial, conjunto de longitudes, conjunto de pasos
(clase)
proxy a un subconjunto de un valarray después de aplicar un segmento
(plantilla de clase)
(C++23)
una vista de arreglo multidimensional que no posee los datos
(plantilla de clase)