Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 /* no especificado */ filter = /* no especificado */ ;

}
(2) (desde C++20)
Firma de llamada
template < ranges:: viewable_range R, class Pred >

requires /* ver más abajo */

constexpr ranges:: view auto filter ( R && r, Pred && pred ) ;
(desde C++20)
template < class Pred >
constexpr /* adaptador de rango de cierre */ filter ( Pred && pred ) ;
(desde C++20)
1) Un adaptador de rango que representa una view de una secuencia subyacente con solo los elementos que satisfacen el predicado.
2) RangeAdaptorObject . La expresión views :: filter ( e, p ) es equivalente-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 subyacente V modela los respectivos conceptos.

Contenidos

Miembros de datos

Miembro Descripción
V base_ la vista subyacente
( objeto miembro solo para exposición* )
copyable-box <Pred> (until C++23) movable-box <Pred> (since C++23) pred_ encapsula el predicado utilizado para filtrar elementos de base_
( objeto miembro solo para exposición* )
non-propagating-cache < ranges:: iterator_t < V >> begin_
(presente solo si V satisface forward_range )
un objeto que almacena en caché un iterador al primer elemento de base_ que satisface el 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 std::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)