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

履歴 編集

customization point object
<ranges>

std::ranges::counted(C++20)

namespace std {
  namespace ranges {
    namespace views {
      inline constexpr /*unspecified*/ counted = /*unspecified*/;
    }
  }

  namespace views = ranges::views;
}

概要

イテレータiと数nに対して、範囲[i, i + n)をRangeとして扱うviewを生成するカスタマイゼーションポイントオブジェクト。実際に生成するのはsubrangespanである。

countedは、手元にイテレータだけがあるとき、そこから指定個数までの範囲をRangeとして扱うために使用できる。これは、ポインタと個数で定まる範囲をcontiguous_rangeとして扱うspanを、一般のイテレータに拡張したものである。

countedはRangeアダプタオブジェクトではないので、パイプライン記法は使用できない。

Rangeコンセプト

borrowed sized output input forward bidirectional random_access contiguous common viewable view

※ イテレータに従う

効果

Eをイテレータ、式Fを進める数、イテレータ型Tdecay_t<decltype((E))>、イテレータの差の型Diter_difference_t<T>とする。式views::counted(E, F)の効果は以下の通り。

#include <ranges>
#include <iterator>
#include <vector>
#include <iostream>

int main() {
  using namespace std;
  vector<int> v;


  for (int i = 0; auto& elem : views::counted(back_inserter(v), 5)) {
    elem = i++;
  }

  for(int elem : v) {
    cout << elem;
  }
}

出力

01234

バージョン

言語

  • C++20

処理系

参照