Namespaces
Variants

std::ranges::take_view<V>::begin

Von de.cppreference.net
 
 
Ranges-Bibliothek
Range-Adaptoren
 
 
constexpr auto begin() requires (!/*simple-view*/<V>);
(1) (seit C++20)
constexpr auto begin() const requires ranges::range<const V>;
(2) (seit C++20)

Gibt einen Iterator auf das erste Element der take_view zurück.

1) Gibt einen std::counted_iterator oder einen ranges::iterator_t<V> zurück.
2) Gibt einen std::counted_iterator oder einen ranges::iterator_t<const V> zurück.

Die Überladung (1) nimmt nicht an der Überladungsauflösung teil, wenn V ein einfacher View ist (d.h. wenn V und const V Views mit denselben Iterator- und Sentinel-Typen sind).

Parameter

(keine)

Rückgabewert

Das Ergebnis hängt von den Konzepten ab, die der möglicherweise const-qualifizierte zugrundeliegende View-Typ Base erfüllt, welcher V für ( 1 ) oder const V für ( 2 ) ist.

Sei base_ die zugrundeliegende Ansicht, count_ der zugrundeliegende Zähler (gleich ​ 0 ​ falls take_view standardinitialisiert wurde).

Der zugrundeliegende Ansichtstyp
erfüllt ...
random_access_range
ja nein
sized_range ja ranges:: begin ( base_ ) std:: counted_iterator ( ranges:: begin ( base_ ) ,
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) )
nein std:: counted_iterator ( ranges:: begin ( base_ ) , count_ )

Beispiel

#include <concepts>
#include <forward_list>
#include <iostream>
#include <ranges>
#include <string_view>
#include <type_traits>
using namespace std::literals;
int main()
{
    {
        static constexpr auto v = {"∀x"sv, "∃y"sv, "ε"sv, "δ"sv};
        auto view = std::ranges::take_view(v, 8);
        auto iter = view.begin();
        std::cout << *iter << '\n';
        static_assert(
            std::ranges::sized_range<decltype(v)> and
            std::ranges::random_access_range<decltype(v)> and
            std::is_same_v<decltype(iter), decltype(std::ranges::begin(v))>
        );
    }
    {
        std::forward_list v = {"Ax"sv, "Ey"sv, "p"sv, "q"sv};
        auto view = std::ranges::take_view(v, 8);
        auto iter = view.begin();
        std::cout << *iter << '\n';
        static_assert(
            not std::ranges::sized_range<decltype(v)> and
            not std::ranges::random_access_range<decltype(v)> and
            std::is_same_v<decltype(iter),
                std::counted_iterator<
                    std::forward_list<std::string_view>::iterator>>
        );
    }
}

Ausgabe:

∀x
Ax

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
P2393R1 C++20 implizite Konvertierungen zwischen vorzeichenbehafteten und vorzeichenlosen Integer-Class-Typen könnten fehlschlagen explizit gemacht

Siehe auch

gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Elementfunktion)
Iterator-Adapter, der den Abstand zum Ende des Bereichs verfolgt
(Klassentemplate)
(C++20)
vergleicht einen Sentinel mit einem von take_view::begin zurückgegebenen Iterator
(Funktion)