GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::views::filter,std::ranges::filter_view(3) C++ Standard Libary std::ranges::views::filter,std::ranges::filter_view(3)

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


Defined in header <ranges>
template< ranges::input_range V,


std::indirect_unary_predicate<ranges::iterator_t<V>> Pred > (since
requires ranges::view<V> && std::is_object_v<Pred> (1) C++20)


class filter_view : public ranges::view_interface<filter_view<V,
Pred>>
namespace views {
(since
inline constexpr /* unspecified */ filter = /* unspecified */; (2) C++20)


}
Call signature
template< ranges::viewable_range R, class Pred >
(since
requires /* see below */ C++20)


constexpr ranges::view auto filter( R&& r, Pred&& pred );
template< class Pred > (since
constexpr /*range adaptor closure*/ filter( Pred&& pred ); C++20)


1) A range adaptor that represents view of an underlying sequence without the
elements that fail to satisfy a predicate.
2) Ranges adaptor object. The expression views::filter(e, p) is
expression-equivalent to filter_view(e, p) for any suitable subexpressions e and p.


filter_view models the concepts bidirectional_range, forward_range, input_range, and
common_range when the underlying view V models respective concepts.


Expression-equivalent


Expression e is expression-equivalent to expression f, if


* e and f have the same effects, and
* either both are constant subexpressions or else neither is a constant
subexpression, and
* either both are potentially-throwing or else neither is potentially-throwing
(i.e. noexcept(e) == noexcept(f)).


Data members


Typical implementations of filter_view hold two or three non-static data members:


* the underlying view of type V (shown here as base_ for exposition only),
* a wrapper that wraps the predicate used to filter out elements of base_ of type
/*copyable-box*/<Pred> (shown here as pred_ for exposition only), where
copyable-box is a wrapper class template that always satisfies copyable,
* an object of std::optional-like type (shown here as begin_ for exposition only)
that caches an iterator to the first element of base_ that satisfies the pred_.
The begin_ may be present only if filter_view models forward_range.


constructor constructs a filter_view
(C++20) (public member function)
base returns the underlying view V
(C++20) (public member function)
pred returns a reference to the predicate stored within filter_view
(C++20) (public member function)
begin returns the beginning iterator of the filter_view
(C++20) (public member function)
end returns the sentinel of the filter_view
(C++20) (public member function)
Inherited from std::ranges::view_interface
empty Returns whether the derived view is empty. Provided if it satisfies
(C++20) sized_range or forward_range.
(public member function of std::ranges::view_interface<D>)
operator bool Returns whether the derived view is not empty. Provided if
(C++20) ranges::empty is applicable to it.
(public member function of std::ranges::view_interface<D>)
front Returns the first element in the derived view. Provided if it
(C++20) satisfies forward_range.
(public member function of std::ranges::view_interface<D>)
back Returns the last element in the derived view. Provided if it satisfies
(C++20) bidirectional_range and common_range.
(public member function of std::ranges::view_interface<D>)

std::ranges::filter_view::filter_view


filter_view() requires std::default_initializable<V> && (1) (since C++20)
std::default_initializable<Pred> = default;
constexpr filter_view( V base, Pred pred ); (2) (since C++20)


1) Value-initializes base_ via its default member initializer (= V()) and
default-initializes pred_ (which value-initializes the contained Pred).
2) Initializes base_ with std::move(base) and initializes pred_ with
std::move(pred).


base - range to filter
pred - predicate to filter out elements

std::ranges::filter_view::base


constexpr V base() const& requires std::copy_constructible<V>; (1) (since C++20)
constexpr V base() &&; (2) (since C++20)


1) Equivalent to return base_;.
2) Equivalent to return std::move(base_);.

std::ranges::filter_view::pred


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


Returns a reference to the contained Pred object. The behavior is undefined if pred_
does not contain a value.

std::ranges::filter_view::begin


constexpr /*iterator*/ begin(); (since C++20)


In order to provide the amortized constant time complexity required by the range
concept, this function caches the result within the filter_view object for use on
subsequent calls. Equivalent to


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())};
}


The behavior is undefined if pred_ does not contain a value.

std::ranges::filter_view::end


constexpr auto end() {


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


}


Deduction guides


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


Nested classes


iterator the iterator type of filter_view
(C++20) (exposition-only member class)
sentinel the sentinel type of filter_view when the underlying view is not a
(C++20) common_range
(exposition-only member class)

// Run this code


#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 << ' ';
}
}


0 4 16


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
if Pred is not default_initializable,
P2325R3 C++20 the default constructor the filter_view is also
constructs a filter_view which does not not default_initializable
contain an Pred


ranges::take_while_view a view consisting of the initial elements of another view,
views::take_while until the first element on which a predicate returns false
(C++20) (class template) (range adaptor object)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.