std::ranges::views::filter, std::ranges::filter_view
| 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) | |
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*) | ||||
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) |
base_
mediante su inicializador de miembro por defecto (
=
V
(
)
) e inicializa por defecto
pred_
(lo cual inicializa por valor el
Pred
contenido).
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) |
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) |