filter_view
(Clase, Biblioteca estándar de C++)
Vista que filtra los elementos de un intervalo que no coinciden con el predicado.
Sintaxis
template<ranges::input_range V, indirect_unary_predicate<iterator_t<V>> Pred>
requires view<V> && is_object_v<Pred>
class filter_view : public view_interface<filter_view<V, Pred>>;
Parámetros de plantilla
V
Tipo del intervalo subyacente.
Pred
Tipo del predicado que determina qué elementos se van a mantener.
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::filter |
Intervalo subyacente | Debe satisfacer input_range o superior |
Tipo de elemento | Igual que el intervalo subyacente |
Ver categoría de iterador | input_range , forward_range o bidirectional_range en función del intervalo subyacente |
Tamaño | No |
Es const -iterable |
No |
Rango común | Solo si el intervalo subyacente cumple common_range |
Intervalo prestado | Solo si el intervalo subyacente cumple borrowed_range |
Miembros
Funciones miembro | Descripción |
---|---|
ConstructoresC++20 | Construya la vista. |
base C++20 |
Obtenga el intervalo subyacente. |
begin C++20 |
Obtenga un iterador al primer elemento. |
end C++20 |
Obtenga el sentinel al final de la vista. |
pred C++20 |
Obtiene una referencia al predicado que determina qué elementos se van a quitar. |
Heredado de view_interface | Descripción |
back C++20 |
Obtenga el último elemento. |
empty C++20 |
Compruebe si la vista está vacía. |
front C++20 |
Obtiene el primer elemento. |
operator bool C++20 |
Compruebe si la vista 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.
Constructores
Construcción de una instancia de filter_view
1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;
Parámetros
base
Vista subyacente.
pred
Predicado que determina qué elementos se van a mantener de la vista subyacente.
Para obtener información sobre los tipos de parámetros de plantilla, consulte Parámetros de plantilla.
Valor devuelto
Instancia de filter_view
.
Comentarios
La mejor manera de crear un filter_view
es usar el adaptador de views::filter
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.
1) Cree un valor inicializado filter_view
. El predicado y la vista subyacente deben ser inicializables de forma predeterminada.
2) Move construye a filter_view
partir de una base
vista y un pred
predicado. Tanto como base
pred
se mueven a través de std::move()
.
Ejemplo: filter_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
void print(auto v)
{
for (auto& x : v)
{
std::cout << x << ' ';
}
std::cout << '\n';
}
int main()
{
std::vector<int> v{0, 1, -2, 3, -4, -5, 6};
auto myView = std::views::filter(v, [](int i) {return i > 0; });
print(myView); // outputs 1 3 6
auto myView2 = v | std::views::filter([](int i) {return i < 3; });
print(myView2); // outputs 0 1 -2 -4 -5
}
1 3 6
0 1 -2 -4 -5
base
Obtiene el intervalo subyacente.
// Uses a copy constructor to return the underlying range
constexpr V base() const& requires std::copy_constructible<V>;
// Uses std::move() to return the underlying range
constexpr V base() &&;
Parámetros
Ninguno.
Devoluciones
Vista subyacente.
begin
Obtenga un iterador al primer elemento de la vista.
constexpr auto begin();
Valor devuelto
Iterador que apunta al primer elemento de la vista. El comportamiento no está definido si la vista no tiene un predicado.
end
Obtenga el sentinel al final de la vista.
constexpr auto end()
Valor devuelto
Sentinel que sigue al último elemento de la vista:
pred
Obtenga una referencia al predicado que determina qué elementos iniciales se van a quitar.
constexpr const Pred& pred() const;
Valor devuelto
Referencia al predicado.
Comentarios
Si la clase no almacena un predicado, el comportamiento no está definido.
Por ejemplo, pred
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
auto mv = v | std::views::filter(
[](int i) {return i < 5; }); // keep the elements < 5
std::cout << std::boolalpha << mv.pred()(v[6]); // outputs "false" because v[6] = 6 and 6 is not less than 5 (the predicate)
}
Consulte también
<ranges>
filter
adaptador de rango
drop_while()
take_while()
ver clases