Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 zum ersten 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.

Overload (1) nimmt nicht an der Überladungsauflösung teil, wenn V eine simple view ist (das heißt, wenn V und const V Views mit denselben Iterator- und Sentinel-Typen sind).

Inhaltsverzeichnis

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)