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_view
todos 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 |
Sí |
Rango común | Sí |
Intervalo prestado | Sí |
Miembros
Funciones miembro | Descripción |
---|---|
ConstructoresC++20 | Construcción de un empty_view . |
begin C++20 |
Devuelve nullptr . |
end C++20 |
Devuelve nullptr . |
size C++20 |
Devuelve 0. |
Heredado de view_interface |
Descripción |
back C++20 |
Da como resultado un comportamiento indefinido. |
data C++20 |
Devuelve nullptr . |
empty C++20 |
Devuelve true . |
front C++20 |
Da como resultado un comportamiento indefinido. |
operator[] C++20 |
Da como resultado un comportamiento indefinido. |
operator bool C++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_view
es 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
.