Namespaces
Variants

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

Aus de.cppreference.net
 
 
Ranges-Bibliothek
Range-Adaptoren
 
 
Definiert in Header <ranges>
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>>
(1) (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>>& is a valid type */
class transform_view
    : public ranges::view_interface<transform_view<V, F>>
(seit C++23)
namespace views {
    inline constexpr /*unspecified*/ transform = /*unspecified*/;
}
(2) (seit C++20)
Aufrufsignatur
template< ranges::viewable_range R, class F >
    requires /* see below */
constexpr ranges::view auto transform( R&& r, F&& fun );
(seit C++20)
template< class F >
constexpr /*range adaptor closure*/ transform( F&& fun );
(seit C++20)
1) Ein Range-Adaptor, der einen view einer zugrundeliegenden 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 der zugrundeliegende view V die jeweiligen Konzepte modelliert.

Datenelemente

Element Beschreibung
V base_ (privat) die zugrunde liegende Ansicht
(nur zur Veranschaulichung dargestelltes Member-Objekt*)

copyable-box<F>

(bis C++23)

movable-box<F>

(seit C++23)
fun_ (privat)
das zugrunde liegende Funktionsobjekt
(nur zur Veranschaulichung dargestelltes Member-Objekt*)

Memberfunktionen

konstruiert einen transform_view
(öffentliche Elementfunktion)
gibt eine Kopie der zugrunde liegenden (adaptierten) Ansicht zurück
(öffentliche Elementfunktion)
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion)
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück, bereitgestellt nur wenn der zugrunde liegende (adaptierte) Bereich sized_range erfüllt
(öffentliche Elementfunktion)
gibt die ungefähre Größe des resultierenden approximately_sized_range zurück
(öffentliche Elementfunktion)
Geerbt von ranges::view_interface
gibt zurück, ob die abgeleitete Sicht leer ist, nur verfügbar, wenn sie sized_range oder forward_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
(C++23)
gibt einen konstanten Iterator zum Beginn des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D>)
(C++23)
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt zurück, ob die abgeleitete Sicht nicht leer ist, nur verfügbar, wenn ranges::empty darauf anwendbar ist
(öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt das erste Element in der abgeleiteten Sicht zurück, verfügbar, wenn sie forward_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt das letzte Element in der abgeleiteten Sicht zurück, nur verfügbar, wenn sie bidirectional_range und common_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
gibt das nte Element in der abgeleiteten Sicht zurück, nur verfügbar, wenn sie random_access_range
erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)

Ableitungsleitfäden

Geschachtelte Klassen

der Iteratortyp
( Nur zur Darstellung dienende Member-Klassenvorlage* )
der Sentineltyp
( Nur zur Darstellung dienende Member-Klassenvorlage* )

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{"de.cppreference.net\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:

de.cppreference.net
pccersrerapr.pbz
pccersrerapr.pbz
de.cppreference.net

Siehe auch

wendet eine Funktion auf einen Bereich von Elementen an
(Algorithmus-Funktionsobjekt)