Namespaces
Variants

std::ranges::views::counted

ja.cppreference.net より
 
 
Rangeライブラリ
Rangeアダプタ
 
ヘッダ <ranges>
inline constexpr /* unspecified */ counted = /* unspecified */;
で定義
(C++20以上)
template< class Iterator, class DifferenceType >
    requires /* see below */
constexpr /*span-or-subrange*/ counted( Iterator&& it, DifferenceType&& count );
呼び出しシグネチャ

(C++20以上)counted view は、あるイテレータ i と非負の整数 [n,  に対する )counted rangei の要素の nview

を提供します。 [counted range , i)nn は、i が指す要素から始まり、n を ++i 回適用した結果が指す要素(存在する場合)は含まない、

個の要素です。 n == 0もし n ならば、counted range は有効であり空です。そうでなければ、counted range は i が正であり、[++i, --n) が逆参照可能であり、かつ

が有効な counted range である場合にのみ有効です。 it形式的には、count と T が式であり、std::decay_t<decltype((it))> が D であり、std::iter_difference_t<T> が

であるとき、 Tもし が input_or_output_iteratordecltype((count)) のモデルであり、std::convertible_to<D> が
  • のモデルであるならば、 Tもし が contiguous_iteratorviews::counted(it, count) のモデルであれば、 は expression-equivalentstd::span(std::to_address(it), static_cast<std::size_t>(static_cast<D>(count))) に
  • であり、 そうでなければ、もし T が random_access_iterator のモデルであれば、views::counted(it, count) は expression-equivalent に ranges::subrange(it, it + static_cast<D>(count)) であり、 そうでなければ、
  • は views::counted(it, count)expression-equivalent に です。 ranges::subrange(std::counted_iterator(it, count), std::default_sentinel)そうでなければ、
は ill-formed です。views::counted(it, count)目次

名前

は views::countedカスタマイゼーションポイントオブジェクト を示し、これは リテラル型の semiregular なクラス型の const 関数オブジェクト です。詳細については CustomizationPointObject を参照してください。

ノート

views::counted は、範囲が count 個の要素すべてを提供するのに十分な長さがあるかどうかをチェックしません。そのチェックが必要な場合は views::take を使用してください。

例

#include <iostream>
#include <ranges>

int main()
{
    const int a[]{1, 2, 3, 4, 5, 6, 7};
    for (int i : std::views::counted(a, 3))
        std::cout << i << ' ';
    std::cout << '\n';

    const auto il = {1, 2, 3, 4, 5};
    for (int i : std::views::counted(il.begin() + 1, 3))
        std::cout << i << ' ';
    std::cout << '\n';
}

出力:

1 2 3
2 3 4

欠陥報告

以下の動作を変更する欠陥報告は、過去に公開された C++ 標準に遡って適用されました。

DR 適用先 公開時の動作 正しい動作
P2393R1 C++20 整数クラス型から std::size_t への暗黙変換が無効である可能性があった 明示的にした

関連項目

別の view の先頭 N 個の要素からなる view
(クラステンプレート) (range adaptor object)
イテレータ-センチネルのペアを view
に結合する(クラステンプレート)
範囲の終端までの距離を追跡するイテレータアダプタ
(クラステンプレート)
特定の基準を満たす要素の数を返す
(アルゴリズム関数オブジェクト)