Namensräume
Varianten
Aktionen

std::ranges::views::take, std::ranges::take_view

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <ranges>
template< ranges::view V >

class take_view

    : public ranges::view_interface<take_view<V>>
(1) (seit C++20)
namespace views {

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

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

    requires /* siehe unten */
constexpr ranges::view auto

    take( R&& r, ranges::range_difference_t<R> count );
(seit C++20)
template< class DifferenceType >
constexpr /* Range-Adapter-Closure */ take( DifferenceType&& count );
(seit C++20)
1) Ein Range-Adapter, der eine view der Elemente einer zugrundeliegenden Sequenz repräsentiert, beginnend am Anfang und endend an einer gegebenen Grenze.
2) views::take ist ein RangeAdaptorObject. Der Ausdruck views::take(e, f) ergibt eine View, die die ersten f Elemente von e repräsentiert. Das Ergebnis ist nicht notwendigerweise eine take_view.

views::take(e, f) ist ausdrucksäquivalent zu (wobei T std::remove_cvref_t<decltype((e))> und D ranges::range_difference_t<decltype((e))> ist)

(seit C++23)
  • andernfalls, take_view(e, f).
In allen Fällen muss decltype((f)) std::convertible_to<D> modellieren.

take_view modelliert die Konzepte contiguous_range, random_access_range, bidirectional_range, forward_range, input_range und sized_range, wenn die zugrundeliegende View V die jeweiligen Konzepte modelliert. Sie modelliert common_range, wenn die zugrundeliegende View V sowohl random_access_range als auch sized_range modelliert.

Inhalt

[bearbeiten] Datenmember

Mitglied Beschreibung
V base_ (private) die zugrunde liegende Ansicht
((exposition-only member object*)
ranges::range_difference_t<V> count_ (private) die Anzahl der zu nehmenden Elemente
((exposition-only member object*)

[bearbeiten] Member-Funktionen

konstruiert eine take_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 die Adresse der Daten der abgeleiteten Ansicht zurück, nur bereitgestellt, wenn ihr Iteratortyp contiguous_iterator erfüllt
(öffentliche Memberfunktion von 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]

[bearbeiten] Deduktions-Guides

[bearbeiten] Verschachtelte Klassen

(C++20)
der Sentinel-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)

[bearbeiten] Hilfstemplates

template< class T >

constexpr bool enable_borrowed_range<std::ranges::take_view<T>> =

    ranges::enable_borrowed_range<T>;
(seit C++20)

Diese Spezialisierung von std::ranges::enable_borrowed_range bewirkt, dass take_view borrowed_range erfüllt, wenn die zugrundeliegende View dies tut.

[bearbeiten] Beispiel

#include <algorithm>
#include <iostream>
#include <ranges>
 
int main()
{
    namespace views = std::views;
    auto print = [](char x){ std::cout << x; };
 
    for (const char nums[]{'1', '2', '3'};
         int n : views::iota(0, 5))
    {
        std::cout << "take(" << n << "): ";
        // safely takes only upto min(n, nums.size()) elements:
        std::ranges::for_each(nums | views::take(n), print);
        std::cout << '\n';
    }
}

Ausgabe

take(0): 
take(1): 1
take(2): 12
take(3): 123
take(4): 123

[bearbeiten] Defect Reports

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3407 C++20 views::take schlug manchmal fehl,
eine sized random access range zu konstruieren
der Ergebnistyp wird so angepasst,
dass die Konstruktion immer gültig ist
LWG 3494 C++20 take_view war nie eine borrowed_range sie ist eine borrowed_range, wenn ihre zugrundeliegende View es ist

[bearbeiten] Siehe auch

erstellt einen Subrange aus einem Iterator und einer Anzahl
(Customization Point Objekt)[edit]
ein view, der aus den anfänglichen Elementen eines anderen view besteht, bis zum ersten Element, für das ein Prädikat false zurückgibt
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
Kopiert eine Anzahl von Elementen an einen neuen Speicherort
(Algorithmus-Funktionsobjekt)[edit]