Compartir vía


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

Vista sin elementos. Esta vista es útil para fines de prueba, como llamar al código que se debe proporcionar con una vista, pero no necesita acceder a sus datos subyacentes.

Sintaxis

template<class T>
    requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;

Parámetros de plantilla

T
El tipo del elemento. Aunque no hay elementos en , empty_viewtodos los rangos son homogéneos. Es decir, tienen elementos de un tipo determinado. Por lo tanto, aunque un empty_view no tiene elementos, todavía tiene un tipo, como un empty_view de int, o strings, etcetera.

Características de la vista

Para obtener una descripción de las siguientes entradas, vea View class characteristics (Ver características de clase).

Característica Descripción
Adaptador de rango views::empty
Intervalo subyacente None
Tipo de elemento Tal y como se especifica cuando empty_view se crea
Ver categoría de iterador contiguous_range
Tamaño Sí. Siempre devuelve 0
Es const-iterable
Rango común
Intervalo prestado

Miembros

Funciones miembro Descripción
ConstructoresC++20 Construcción de un empty_view.
beginC++20 Devuelve nullptr.
endC++20 Devuelve nullptr.
sizeC++20 Devuelve 0.
Heredado de view_interface Descripción
backC++20 Da como resultado un comportamiento indefinido.
dataC++20 Devuelve nullptr.
emptyC++20 Devuelve true.
frontC++20 Da como resultado un comportamiento indefinido.
operator[]C++20 Da como resultado un comportamiento indefinido.
operator boolC++20 Devuelve false.

Comentarios

La mejor manera de crear un empty_view es usar el adaptador de empty rango. Los adaptadores de rango son la manera prevista de crear clases de vista. Los tipos de vista se exponen en caso de que desee crear su propio tipo de vista personalizado.

Dado que nunca puede haber ningún elemento en , empty_viewes posible realizar determinadas optimizaciones del compilador. Por ejemplo, el compilador eliminará for (auto e : std::views::empty<int>) {...} porque sabe que no hay nada que iterar.

Otro uso para empty_view es dividir un split_view con un empty_view delimitador, lo que da como resultado un intervalo de intervalos de elementos únicos.

Requisitos

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

Espacio de nombres: std::ranges

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

Constructores

Cree una instancia de empty_view.

template<class T>
inline constexpr empty_view<T> empty{};

Parámetros

T
Tipo del elemento subyacente, del que no hay ninguno.

Comentarios

La mejor manera de crear un empty_view es usar el adaptador de empty rango.

Por ejemplo, empty_view

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

int main()
{
    auto anEmptyView = std::views::empty<int>;
    bool isNotEmpty = (bool)anEmptyView;
    std::cout << std::boolalpha << isNotEmpty << "\n"; // false
    std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true

back

Da como resultado un comportamiento indefinido.

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

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

Parámetros

Ninguno.

Valor devuelto

Ninguno.

Comentarios

Al llamar a esta función en una compilación de depuración, se genera una aserción a la que se ha llamado a la función en un vacío view_interface.

begin

Devuelve nullptr porque no hay un primer elemento en la vista.

static constexpr T* begin() noexcept

Valor devuelto

nullptr

data

Devuelve nullptr porque no hay un primer elemento en la vista para obtener un puntero.

static constexpr T* data() noexcept

Valor devuelto

nullptr.

empty

Compruebe si la vista derivada está vacía.

static constexpr bool empty() noexcept

Parámetros

Ninguno.

Valor devuelto

Devuelve true.

end

Devuelve nullptr porque no hay ningún elemento en la vista.

static constexpr T* end() noexcept

Valor devuelto

nullptr.

front

Da como resultado un comportamiento indefinido.

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

Parámetros

Ninguno.

Valor devuelto

Ninguno.

Comentarios

Al llamar a esta función en una compilación de depuración, se genera una aserción a la que se ha llamado a la función en un vacío view_interface.

operator[]

Da como resultado un comportamiento indefinido.

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

template<ranges::random_access_range R = const T>
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

Ninguno.

Comentarios

Al llamar a esta función en una compilación de depuración, se genera una aserción que el índice está fuera del intervalo para view_interface.

operator bool

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

constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };

constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };

Parámetros

Ninguno.

Valor devuelto

Devuelve false.

Por ejemplo, (bool)

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

int main()
{
    auto anEmptyView = std::views::empty<int>;

    if (anEmptyView) // check if anEmptyView isn't empty
    {
        std::cout << "Error: why does an empty_view have elements?\n";
    }
    else
    {
        std::cout << "Correct: an empty_view is not not empty\n";
    }
}
Correct: an empty_view is not not empty

size

Obtenga el número de elementos de la vista, que siempre será 0.

static constexpr size_t size()

Parámetros

Ninguno.

Valor devuelto

0.

Consulte también

<ranges>
empty adaptador de rango
single_view
ver clases