• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    customization point object
    <ranges>

    std::ranges::size

    namespace std::ranges {
      inline namespace /*unspecified*/ {
        inline constexpr /*unspecified*/ size = /*unspecified*/;
      }
    }
    

    概要

    Rangeの要素数を取得する関数オブジェクト。

    効果

    部分式Eの型をTtEを評価した値とする。このとき、式ranges::size(E)の効果は以下の通り。

    1. Tが配列型であれば、decay-copy(extent_v<T>)に等しい(expression‑equivalent)。ただし、要素数不明の配列であれば、呼び出しは不適格
    2. disable_sized_range<remove_cv_t<T>>false、かつdecay-copy(t.size())が整数型(integer-like)の有効な式であれば、decay-copy(t.size())と等しい。
    3. Tがクラス型または列挙体であって、disable_sized_range<remove_cv_t<T>>false、かつsizeADLで見つかり、decay-copy(size(t))が整数型の有効な式であれば、decay-copy(size(t))と等しい。
    4. to-unsigned-like(ranges::end(t) -ranges::begin(t))が有効な式で、ranges::beginの型Iranges::endの型Ssized_sentinel_for<S, I>forward_iteratorのモデルであれば、to-unsigned-like(ranges::end(t) -ranges::begin(t))と等しい。

    どれにも当てはまらないとき、呼び出しは不適格

    戻り値

    Rangeの要素数。

    カスタマイゼーションポイント

    ranges::beginranges::endをカスタマイズすることで、ranges::sizeをカスタマイズできる。 もしくは、メンバ関数sizeを持たせるなどの方法でカスタマイズできる。

    備考

    ranges::size(E)が有効な式であるとき、その型は整数型(integer-like)。

    #include <vector>
    #include <iostream>
    #include <ranges>
    
    int main()
    {
      int arr[4] = {};
      std::cout << std::ranges::size(arr) << std::endl;
    
      std::cout << std::ranges::size(u8"arikitari") << std::endl;
    
      std::vector<int> v = { 1,1,2,3,5,8 };
      int hoge = 13;
      v.push_back(hoge);
      std::cout << std::ranges::size(v) << std::endl;
    }
    

    出力

    4
    10
    7
    

    バージョン

    言語

    • C++20

    処理系

    関連項目

    参照