Namensräume
Varianten
Aktionen

std::ranges::views::transform, std::ranges::transform_view

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <ranges>
(1)
template< ranges::input_range V,

          std::copy_constructible F >
    requires ranges::view<V> &&
             std::is_object_v<F> &&
             std::regular_invocable<F&, ranges::range_reference_t<V>> &&
             /* invoke_result_t<F&, range_reference_t<V>>& is a valid type */
class transform_view

    : public ranges::view_interface<transform_view<V, F>>
(seit C++20)
(bis C++23)
template< ranges::input_range V,

          std::move_constructible F >
    requires ranges::view<V> &&
             std::is_object_v<F> &&
             std::regular_invocable<F&, ranges::range_reference_t<V>> &&
             /* invoke_result_t<F&, range_reference_t<V>>& ist ein gültiger Typ */
class transform_view

    : public ranges::view_interface<transform_view<V, F>>
(seit C++23)
namespace views {

    inline constexpr /*nicht spezifiziert*/ transform = /*nicht spezifiziert*/;

}
(2) (seit C++20)
Aufruf-Signatur
template< ranges::viewable_range R, class F >

    requires /* siehe unten */

constexpr ranges::view auto transform( R&& r, F&& fun );
(seit C++20)
template< class F >
constexpr /*Bereichs-Adaptor-Closure*/ transform( F&& fun );
(seit C++20)
1) Ein Bereichs-Adaptor, der eine view einer zugrunde liegenden Sequenz darstellt, nachdem eine Transformationsfunktion auf jedes Element angewendet wurde.
2) RangeAdaptorObject. Der Ausdruck views::transform(e, f) ist ausdrucksäquivalent zu transform_view(e, f) für alle geeigneten Teilausdrücke e und f.

transform_view modelliert die Konzepte random_access_range, bidirectional_range, forward_range, input_range, common_range und sized_range, wenn die zugrunde liegende View V die entsprechenden Konzepte modelliert.

Inhalt

[edit] Datenmember

Mitglied Beschreibung
V base_ (private) die zugrunde liegende Ansicht
((exposition-only member object*)
copyable-box<F>(bis C++23)movable-box<F>(seit C++23) fun_ (private) das zugrunde liegende Funktions-Objekt
((exposition-only member object*)

[edit] Member-Funktionen

konstruiert eine transform_view
(öffentliche Member-Funktion) [edit]
gibt eine Kopie der zugrunde liegenden (angepassten) View zurück
(public member function) [edit]
gibt einen Iterator zum Anfang zurück
(öffentliche Member-Funktion) [edit]
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Member-Funktion) [edit]
gibt die Anzahl der Elemente zurück, nur bereitgestellt, wenn die zugrunde liegende (adaptierte) Range sized_range erfüllt
(öffentliche Member-Funktion) [edit]
Geerbt von std::ranges::view_interface
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur, wenn sie sized_range oder forward_range erfüllt
(public member function of std::ranges::view_interface<D>) [edit]
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
(C++23)
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist
(public member function of std::ranges::view_interface<D>) [edit]
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt
(öffentliche Member-Funktion von std::ranges::view_interface<D>) [edit]
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt
(öffentliche Member-Funktion von std::ranges::view_interface<D>) [edit]
gibt das n-te Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie random_access_range erfüllt
(öffentliche Member-Funktion von std::ranges::view_interface<D>) [edit]

[edit] Deduktions-Guides

[edit] Verschachtelte Klassen

der Iterator-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)
der Sentinel-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)

[edit] Beispiel

#include <algorithm>
#include <cstdio>
#include <iterator>
#include <ranges>
#include <string>
 
char rot13a(const char x, const char a)
{
    return a + (x - a + 13) % 26;
}
 
char rot13(const char x)
{
    if ('Z' >= x and x >= 'A')
        return rot13a(x, 'A');
 
    if ('z' >= x and x >= 'a')
        return rot13a(x, 'a');
 
    return x;
}
 
int main()
{
    auto show = [](const unsigned char x) { std::putchar(x); };
 
    std::string in{"cppreference.com\n"};
    std::ranges::for_each(in, show);
    std::ranges::for_each(in | std::views::transform(rot13), show);
 
    std::string out;
    std::ranges::copy(std::views::transform(in, rot13), std::back_inserter(out));
    std::ranges::for_each(out, show);
    std::ranges::for_each(out | std::views::transform(rot13), show);
}

Ausgabe

cppreference.com
pccersrerapr.pbz
pccersrerapr.pbz
cppreference.com

[edit] Siehe auch

Wendet eine Funktion auf einen Elementbereich an
(Algorithmus-Funktionsobjekt)[edit]