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 |
---|---|
back C++20 |
Obtenga el último elemento de la vista derivada. |
data C++20 |
Obtenga un puntero al primer elemento de la vista derivada. |
empty C++20 |
Compruebe si la vista derivada está vacía. |
front C++20 |
Obtenga el primer elemento de la vista derivada. |
size C++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 bool C++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