Namespaces
Variants

std::ranges::views::filter, std::ranges::filter_view

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rango
 
 
Definido en el encabezado <ranges>
template< ranges::input_range V,
          std::indirect_unary_predicate<ranges::iterator_t<V>> Pred >
    requires ranges::view<V> && std::is_object_v<Pred>
class filter_view
    : public ranges::view_interface<filter_view<V, Pred>>
(1) (desde C++20)
namespace views {
    inline constexpr /* unspecified */ filter = /* unspecified */;
}
(2) (desde C++20)
Firma de llamada
template< ranges::viewable_range R, class Pred >
    requires /* see below */
constexpr ranges::view auto filter( R&& r, Pred&& pred );
(desde C++20)
template< class Pred >
constexpr /* range adaptor closure */ filter( Pred&& pred );
(desde C++20)
1) Un adaptador de rango que representa una view de una secuencia subyacente sin los elementos que no cumplen con un predicado.
2) RangeAdaptorObject. La expresión views::filter(e, p) es equivalente en expresión a filter_view(e, p) para cualesquiera subexpresiones adecuadas e y p.

filter_view modela los conceptos bidirectional_range, forward_range, input_range, y common_range cuando la view V subyacente modela los conceptos respectivos.

Miembros de datos

Miembro Descripción
V base_ (privado) la vista subyacente
(objeto miembro solo para exposición*)

copyable-box<Pred>

(hasta C++23)

movable-box<Pred>

(desde C++23)
pred_ (privado)
envuelve el predicado usado para filtrar elementos de base_
(objeto miembro solo para exposición*)
caché no propagador<ranges::iterator_t<V>>
  
begin_ (privado)
(presente solo si V satisface forward_range)
un objeto que almacena en caché un iterador al primer elemento de base_ que satisface pred_
(objeto miembro solo para exposición*)

Funciones miembro

construye un filter_view
(función miembro pública)
devuelve la vista subyacente V
(función miembro pública)
devuelve una referencia al predicado almacenado en filter_view
(función miembro pública)
devuelve el iterador inicial del filter_view
(función miembro pública)
devuelve el centinela del filter_view
(función miembro pública)
Heredado de ranges::view_interface
devuelve si la vista derivada está vacía, proporcionado solo si satisface sized_range o forward_range
(función miembro pública de std::ranges::view_interface<D>)
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D>)
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D>)
devuelve si la vista derivada no está vacía, proporcionado solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D>)
devuelve el primer elemento en la vista derivada, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D>)
devuelve el último elemento en la vista derivada, proporcionado solo si satisface bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D>)

std::ranges::filter_view:: filter_view

filter_view ( ) requires std:: default_initializable < V > &&
std:: default_initializable < Pred > = default ;
(1) (desde C++20)
constexpr explicit filter_view ( V base, Pred pred ) ;
(2) (desde C++20)
1) Inicializa por valor base_ mediante su inicializador de miembro por defecto ( = V ( ) ) e inicializa por defecto pred_ (lo cual inicializa por valor el Pred contenido).
2) Inicializa base_ con std :: move ( base ) e inicializa pred_ con std :: move ( pred ) .

Parámetros

base - rango a filtrar
pred - predicado para filtrar elementos

std::ranges::filter_view:: base

constexpr V base ( ) const & requires std:: copy_constructible < V > ;
(1) (desde C++20)
constexpr V base ( ) && ;
(2) (desde C++20)
1) Equivalente a return base_ ; .
2) Equivalente a return std :: move ( base_ ) ; .

std::ranges::filter_view:: pred

constexpr const Pred & pred ( ) const ;
(desde C++20)

Devuelve una referencia al objeto Pred contenido. El comportamiento es indefinido si pred_ no contiene un valor.

std::ranges::filter_view:: begin

constexpr /*iterator*/ begin ( ) ;
( solo para exposición* )

Para proporcionar la complejidad de tiempo constante amortizada requerida por el concepto range , esta función almacena en caché el resultado dentro del objeto filter_view para su uso en llamadas posteriores. Equivalente a

if constexpr (!ranges::forward_range<V>)
    return /*iterator*/{*this, ranges::find_if(base_, std::ref(*pred_))};
else
{
    if (!begin_.has_value())
        begin_ = ranges::find_if(base_, std::ref(*pred_)); // caching
    return /*iterator*/{*this, begin_.value())};
}

El comportamiento es indefinido si pred_ no contiene un valor.

std::ranges::filter_view:: end

constexpr auto end ( ) ;
(desde C++20)

Devuelve un iterador al final. Equivalente a

if constexpr (ranges::common_range<V>)
    return /*iterator*/{*this, ranges::end(base_)};
else
    return /*sentinel*/{*this};

Guías de deducción

template < class R, class Pred >
filter_view ( R && , Pred ) - > filter_view < views:: all_t < R > , Pred > ;
(desde C++20)

Clases anidadas

el tipo de iterador de filter_view
( clase miembro solo para exposición* )
el tipo de centinela de filter_view cuando la vista subyacente no es un common_range
( clase miembro solo para exposición* )

Ejemplo

#include <iostream>
#include <ranges>
int main()
{
    auto even = [](int i) { return 0 == i % 2; };
    auto square = [](int i) { return i * i; };
    for (int i : std::views::iota(0, 6)
               | std::views::filter(even)
               | std::views::transform(square))
        std::cout << i << ' ';
    std::cout << '\n';
}

Salida:

0 4 16

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3714
( P2711R1 )
C++20 el constructor multiparámetro no era explícito hecho explícito
P2325R3 C++20 si Pred no es default_initializable , el constructor por defecto
construye un filter_view que no contiene un Pred
el filter_view tampoco es
default_initializable

Véase también

una view que consiste en los elementos iniciales de otra view , hasta el primer elemento en el cual un predicado devuelve false
(plantilla de clase) (objeto adaptador de rango)