Compartir vía


view_interface (Clase, Biblioteca estándar de C++)

Clase base para las clases de vista en el std::ranges espacio de nombres . Esta clase implementa parte de la interfaz para los tipos de vista derivados. Úselo como clase base para sus propios tipos de vista para reducir la reutilizable que necesita escribir.

Sintaxis

template<class Derived>
  requires std::is_class_v<Derived> && 
  std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;

Parámetros de plantilla

Derived
Tipo de la clase que deriva de esta clase base.

Miembros

Funciones miembro Descripción
backC++20 Obtenga el último elemento de la vista derivada.
dataC++20 Obtenga un puntero al primer elemento de la vista derivada.
emptyC++20 Compruebe si la vista derivada está vacía.
frontC++20 Obtenga el primer elemento de la vista derivada.
sizeC++20 Obtenga el número de elementos de la vista derivada.
Operadores Descripción
operator[]C++20 Obtiene el elemento que se encuentra en la posición especificada.
operator boolC++20 Compruebe si la vista derivada no está vacía.

Requisitos

Encabezado: <ranges> (desde C++20)

Espacio de nombres: std::ranges

Opción del compilador: /std:c++20 o posterior es necesaria.

back

Obtenga el último elemento de la vista derivada.

constexpr auto back()
    requires ranges::bidirectional_range<Derived> &&
    ranges::common_range<Derived>;

constexpr auto back() const
    requires ranges::bidirectional_range<const Derived> && 
    ranges::common_range<const Derived>;

Parámetros

Ninguno.

Valor devuelto

Último elemento de la vista derivada.

Comentarios

La vista derivada debe satisfacer bidirectional_range y common_range.
El comportamiento de back() y front() no están definidos para cualquier vista vacía.

data

Obtenga un puntero al primer elemento de la vista derivada.

constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
    requires ranges::range<const Derived> &&
    std::contiguous_iterator<ranges::iterator_t<const Derived>>;

Parámetros

Ninguno.

Valor devuelto

Puntero al primer elemento de la vista derivada.

Comentarios

El iterador de la vista derivada debe satisfacer contiguous_iterator.

empty

Compruebe si la vista derivada está vacía.

1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;

Parámetros

Ninguno.

Valor devuelto

Devuelve true si la vista derivada no tiene elementos. De lo contrario, devuelve false.

Comentarios

La vista derivada debe satisfacer std::ranges::forward_range.

front

Obtenga el primer elemento de la vista derivada.

constexpr auto front()
    requires ranges::forward_range<Derived>;
constexpr auto front() const
    requires ranges::forward_range<const Derived>;

Parámetros

Ninguno.

Valor devuelto

Último elemento de la vista derivada.

Comentarios

La vista derivada debe satisfacer forward_range.
El comportamiento de front() es indefinido para std::ranges::empty_view.

size

Obtenga el número de elementos de la vista derivada.

constexpr auto size() requires ranges::forward_range<Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<Derived>,
    ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
    ranges::iterator_t<const Derived>>;

Parámetros

Ninguno.

Valor devuelto

Número de elementos de la vista derivada.

Comentarios

El iterador de la vista derivada debe satisfacer sized_sentinel_for.

operator[]

Obtiene el elemento que se encuentra en la posición especificada.

template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

Parámetros

pos
Posición, relativa al iterador inicial, del elemento que se va a devolver.

Valor devuelto

Elemento en la posición especificada en relación con el iterador inicial.

Comentarios

La vista derivada debe satisfacer random_access_range.
El comportamiento de este operador no está definido para std::ranges::empty_view.

Ejemplo: operator[]

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::drop_view dv = std::views::drop(v, 2);

    for (auto e : dv)
    {
        std::cout << e << ' '; // 3 4 5
    }

    std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4

view_interface::operator bool

Compruebe si la vista derivada no está vacía.

explicit constexpr operator bool();
explicit constexpr operator bool() const;

Parámetros

Ninguno.

Valor devuelto

Devuelve false si la vista derivada no tiene elementos (la vista está vacía). De lo contrario, devuelve true (la vista no está vacía).

Comentarios

El iterador de la vista derivada debe satisfacer std::ranges::forward_iterator.
Este operador es equivalente a !empty(). Esto facilita escribir if (someRange) {...} para probar si hay algo en el intervalo en el que operar.
El comportamiento de este operador no está definido para std::ranges::empty_view.

Ejemplo: operator bool

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });

    bool isNotEmpty = static_cast<bool>(fv);
    std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true

Consulte también

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Ver clases