Namespaces
Variants

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

ja.cppreference.net から
 
 
Rangesライブラリ
範囲アダプタ
 
 
constexpr auto begin() requires (!/*simple-view*/<V>);
(1) (C++20以降)
constexpr auto begin() const requires ranges::range<const V>;
(2) (C++20以降)

take_view の最初の要素へのイテレータを返します。 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 から返されたイテレータと番兵を比較する
(関数)