Namensräume
Varianten
Aktionen

std::ranges::views::drop, std::ranges::drop_view

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

class drop_view

    : public ranges::view_interface<drop_view<V>>
(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 */
constexpr ranges::view auto

    drop( R&& r, ranges::range_difference_t<R> count );
(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
  • std::span<typename T::element_type>, wenn T eine Spezialisierung von std::span ist;
  • T andernfalls;
  • views::repeat(*e.value_, ranges::distance(e) - inc), wenn T sized_range modelliert; in diesem Fall wird e nur einmal ausgewertet;
  • ((void)e, auto(f)) andernfalls, außer dass die Auswertungen von e und f unbestimmt sequenziert sind;
(seit C++23)
  • andernfalls, drop_view(e, f).
In allen Fällen muss `decltype((f))` std::convertible_to<D> modellieren.

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) [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] Deduktionshilfen

[bearbeiten] Hilfsschablonen

template< class T >

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

    ranges::enable_borrowed_range<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

#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, um
einen 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)[edit]