std::ranges::views::take, std::ranges::take_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::view V > class take_view |
(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 */ |
(seit C++20) | |
| template< class DifferenceType > constexpr /* Range-Adapter-Closure */ take( DifferenceType&& count ); |
(seit C++20) | |
view der Elemente einer zugrundeliegenden Sequenz repräsentiert, beginnend am Anfang und endend an einer gegebenen Grenze.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)
- ((void)f,
decay-copy(e)), wennTeine ranges::empty_view ist, außer dass die Auswertungen von e und f indeterminiert sequenziert sind; - U(ranges::begin(e), ranges::begin(e) + std::min<D>(ranges::distance(e), f)), wenn
Teine Spezialisierung von std::span, std::basic_string_view oder ranges::subrange ist, die sowohlrandom_access_rangeals auchsized_rangemodelliert, wobeiUist
- std::span<typename T::element_type>, wenn
Teine Spezialisierung von std::span ist; -
T, wennTeine Spezialisierung von std::basic_string_view ist; - ranges::subrange<ranges::iterator_t<T>>, wenn
Teine Spezialisierung von ranges::subrange ist;
- std::span<typename T::element_type>, wenn
- ranges::iota_view(*ranges::begin(e),
*(ranges::begin(e) + std::min<D>(ranges::distance(e), f))), wennTeine Spezialisierung von ranges::iota_view ist, die sowohlrandom_access_rangeals auchsized_rangemodelliert;
|
(seit C++23) |
- andernfalls, take_view(e, f).
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) | |
| gibt eine Kopie der zugrunde liegenden (angepassten) View zurück (public member function) | |
| gibt einen Iterator zum Anfang zurück (öffentliche Member-Funktion) | |
| gibt einen Iterator oder Sentinel zum Ende zurück (öffentliche Member-Funktion) | |
gibt die Anzahl der Elemente zurück, nur bereitgestellt, wenn die zugrunde liegende (adaptierte) Range sized_range erfüllt(öffentliche Member-Funktion) | |
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>) | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| 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>) | |
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>) | |
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>) | |
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>) | |
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>) | |
[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>> = |
(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
| (C++20) |
erstellt einen Subrange aus einem Iterator und einer Anzahl (Customization Point Objekt) |
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) | |
| (C++20) |
Kopiert eine Anzahl von Elementen an einen neuen Speicherort (Algorithmus-Funktionsobjekt) |