std::ranges::views::drop, std::ranges::drop_view
Von cppreference.com
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::view V > class drop_view |
(1) | (seit C++20) |
| namespace views { inline constexpr /* nicht spezifiziert */ drop = /* nicht spezifiziert */; |
(2) | (seit C++20) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R > requires /* siehe unten */ |
(seit C++20) | |
| template< class DifferenceType > constexpr /* Bereichs-Adaptor-Closure */ drop( DifferenceType&& count ); |
(seit C++20) | |
1) Ein Bereichs-Adaptor, der aus Elementen der zugrundeliegenden Sequenz besteht und die ersten N Elemente überspringt.
2) RangeAdaptorObject. Gegeben sei
T sei std::remove_cvref_t<decltype((e))> und D sei ranges::range_difference_t<decltype((e))>), der Ausdruck views::drop(e, f) ist ausdrucks-äquivalent zu- ((void)f,
decay-copy(e)), wennTeine ranges::empty_view ist, außer dass die Auswertungen von e und f unbestimmt sequenziert sind; - andernfalls, T(ranges::begin(e) + inc, ranges::end(e),
/* to-unsigned-like */(ranges::distance(e) - inc)), wennTeine Spezialisierung von ranges::subrange ist, die sowohlrandom_access_rangeals auchsized_rangemodelliert, undTdie Größe speichern muss (siehe ranges::subrange::subrange() für Details), wobei inc std::min<D>(ranges::distance(e), f) ist; - andernfalls, U(ranges::begin(e) + inc, ranges::end(e)), wenn
Teine Spezialisierung von std::span, std::basic_string_view, ranges::iota_view oder ranges::subrange ist, die sowohlrandom_access_rangeals auchsized_rangemodelliert, wobeiUist
|
(seit C++23) |
- andernfalls, drop_view(e, f).
drop_view modelliert die Konzepte contiguous_range, random_access_range, bidirectional_range, forward_range, input_range, common_range und sized_range, wenn die zugrundeliegende Ansicht V die entsprechenden Konzepte modelliert.
Inhalt |
[bearbeiten] Datenmember
| Mitglied | Beschreibung |
V base_ (private) |
die zugrunde liegende Ansicht ((exposition-only member object*) |
ranges::range_difference_t<V> count_ (privat) |
die Anzahl der zu überspringenden Elemente ((exposition-only member object*) |
non-propagating-cache<ranges::iterator_t<V>> cache_ (privat)(vorhanden nur, wenn V forward_range, aber nicht random_access_range und sized_range erfüllt)
|
ein Objekt, das das Ergebnis von Aufrufen von begin() zwischenspeichert((exposition-only member object*) |
[bearbeiten] Memberfunktionen
konstruiert eine drop_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] Deduktionshilfen
[bearbeiten] Hilfsschablonen
| template< class T > constexpr bool enable_borrowed_range<std::ranges::drop_view<T>> = |
(seit C++20) | |
Diese Spezialisierung von ranges::enable_borrowed_range lässt drop_view borrowed_range erfüllen, wenn die zugrundeliegende Ansicht dies erfüllt.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <ranges> int main() { const auto nums = {1, 2, 3, 4, 5, 6, 7}; std::cout << "drop " << 2 << ": "; for (int i : std::ranges::drop_view{nums, 2}) std::cout << i << ' '; std::cout << '\n'; std::cout << "drop " << 3 << ": "; for (int i : nums | std::views::drop(3)) std::cout << i << ' '; std::cout << '\n'; std::cout << "drop " << 4 << ": "; for (int i : std::views::iota(1, 8) | std::views::drop(4)) std::cout << i << ' '; std::cout << '\n'; // Note that dropping more than the number of elements is OK: for (int dp : {5, 6, 7, 890, 100500}) { std::cout << "drop " << dp << ": "; for (int i : std::views::iota(1, 8) | std::views::drop(dp)) std::cout << i << ' '; std::cout << '\n'; } }
Ausgabe
drop 2: 3 4 5 6 7 drop 3: 4 5 6 7 drop 4: 5 6 7 drop 5: 6 7 drop 6: 7 drop 7: drop 890: drop 100500:
[bearbeiten] Defektberichte
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::drop schlägt manchmal fehl, umeinen sized random access range zu konstruieren |
die Konstruktion wird angepasst damit sie immer gültig ist |
| LWG 3494 | C++20 | drop_view war nie ein borrowed_range |
sie ist eine borrowed_range, wenn ihre zugrundeliegende View es ist |
[bearbeiten] Siehe auch
ein view, der aus den Elementen eines anderen view besteht, wobei die anfängliche Teilsequenz von Elementen übersprungen wird, bis zum ersten Element, bei dem das Prädikat false zurückgibt(Klassen-Template) (Range-Adaptor-Objekt) |