Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
constexpr auto begin ( ) requires ( ! /*simple-view*/ < V > ) ;
(1) (C++20以降)
constexpr auto begin ( ) const requires ranges:: range < const V > ;
(2) (C++20以降)

take_view の最初の要素へのイテレータを返します。

1) std:: counted_iterator または ranges:: iterator_t < V > を返します。
2) std:: counted_iterator または ranges:: iterator_t < const V > を返します。

オーバーロード (1) は、 V simple view である場合(つまり、 V const V が同じイテレータ型とセンチネル型を持つビューである場合)、オーバーロード解決に参加しません。

目次

パラメータ

(なし)

戻り値

結果は、可能性としてconst修飾された基盤となるビュー型 Base が満たすコンセプトに依存します。これは ( 1 ) では V ( 2 ) では const V となります。

base_ を基底ビューとし、 count_ を基底カウンターとする( take_view がデフォルト初期化された場合は 0 に等しい)。

基となるビュー型が
次を満たす場合...
random_access_range
はい いいえ
sized_range はい ranges:: begin ( base_ ) std:: counted_iterator ( ranges:: begin ( base_ ) ,
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) )
いいえ std:: counted_iterator ( ranges:: begin ( base_ ) , count_ )

#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>>
        );
    }
}

出力:

∀x
Ax

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
P2393R1 C++20 signedとunsignedのinteger-class型間の暗黙変換が失敗する可能性がある 明示的に変更

関連項目

終端を指すイテレータまたは番兵を返す
(公開メンバ関数)
範囲の終端までの距離を追跡するイテレータアダプタ
(クラステンプレート)
(C++20)
take_view::begin から返されたイテレータと番兵を比較する
(関数)