Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Definiert im Header <ranges>
template < ranges:: view V >

class drop_view

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

inline constexpr /* unspecified */ drop = /* unspecified */ ;

}
(2) (seit C++20)
Aufrufsignatur
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 /* range adaptor closure */ drop ( DifferenceType && count ) ;
(seit C++20)
1) Ein Bereichsadapter, der aus Elementen der zugrundeliegenden Sequenz besteht und die ersten N Elemente überspringt.
2) RangeAdaptorObject . Given T is std:: remove_cvref_t < decltype ( ( e ) ) > and D is ranges:: range_difference_t < decltype ( ( e ) ) > ), the expression views :: drop ( e, f ) is ausdrucksäquivalent to:
  • views:: repeat ( * e. value_ , ranges:: distance ( e ) - inc ) , falls T das Konzept sized_range modelliert; in diesem Fall wird e nur einmal ausgewertet;
  • ( ( void ) e, auto ( f ) ) andernfalls, mit der Ausnahme, dass die Auswertungen von e und f in unbestimmter Reihenfolge erfolgen;
(seit C++23)
  • ansonsten, drop_view ( e, f ) .
In all cases, decltype ( ( f ) ) must model std:: convertible_to < D > .

drop_view modelliert die Konzepte contiguous_range , random_access_range , bidirectional_range , forward_range , input_range , common_range und sized_range , wenn die zugrundeliegende View V die jeweiligen Konzepte modelliert.

Inhaltsverzeichnis

Datenmitglieder

Member Beschreibung
V base_ (privat) die zugrundeliegende Ansicht
( Nur zur Veranschaulichung verwendetes Member-Objekt* )
ranges:: range_difference_t < V > count_ (privat) die Anzahl der zu überspringenden Elemente
( Nur zur Veranschaulichung verwendetes Member-Objekt* )
non-propagating-cache < ranges:: iterator_t < V >> cache_ (privat)
(nur vorhanden wenn V forward_range erfüllt, aber nicht random_access_range und sized_range )
ein Objekt, das das Ergebnis von Aufrufen an begin() zwischenspeichert
( Nur zur Veranschaulichung verwendetes Member-Objekt* )

Memberfunktionen

konstruiert einen drop_view
(öffentliche Elementfunktion)
gibt eine Kopie der zugrundeliegenden (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 zugrundeliegende (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 std::ranges::view_interface
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur wenn sie sized_range oder forward_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
(C++23)
gibt einen konstanten Iterator zum Anfang 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 Ansicht nicht leer ist, bereitgestellt nur wenn ranges::empty darauf anwendbar ist
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
ruft die Adresse der Daten der abgeleiteten Ansicht ab, bereitgestellt nur wenn ihr Iteratortyp contiguous_iterator erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie forward_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie bidirectional_range und common_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das n te Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie random_access_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )

Ableitungsleitfäden

Hilfsvorlagen

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 bewirkt, dass drop_view borrowed_range erfüllt, wenn die zugrundeliegende View diese Bedingung erfüllt.

Beispiel

#include <initializer_list>
#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';
    // Hinweis: Das Überspringen von mehr Elementen als vorhanden ist unproblematisch:
    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:

Fehlerberichte

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 konnte manchmal keinen
sized random access range konstruieren
die Konstruktion wurde angepasst,
sodass sie immer gültig ist
LWG 3494 C++20 drop_view war nie ein borrowed_range es ist ein borrowed_range wenn der zugrundeliegende View es ist

Siehe auch

eine view , bestehend aus den Elementen einer anderen view , die das anfängliche Elemente-Subsequenz überspringt, bis zum ersten Element, bei dem das Prädikat false zurückgibt
(Klassen-Template) (Range-Adapter-Objekt)