Namespaces
Variants

std::experimental::ranges:: distance

From cppreference.net
namespace {

constexpr /* unspecified */ distance = /* unspecified */ ;

}
(ranges TS)
(カスタマイゼーションポイントオブジェクト)
呼び出しシグネチャ
template < Iterator I, Sentinel < I > S >
constexpr ranges :: difference_type_t < I > distance ( I first, S last ) ;
(1)
template < Range R >
constexpr ranges :: difference_type_t < ranges:: iterator_t < R >> distance ( R && r ) ;
(2)
template < SizedRange R >
constexpr ranges :: difference_type_t < ranges:: iterator_t < R >> distance ( R && r ) ;
(3)

first last の間の距離、または範囲 r の先頭と末尾の間の距離を返します。

1) SizedSentinel < S, I > が満たされる場合、 return last - first ; と等価。それ以外の場合、 first から last に到達するために必要なインクリメントの回数を返す。 [ first , last ) が範囲を表さない場合、 I S は同じ型でなければならず、 SizedSentinel をモデル化している必要があり、かつ [ last , first ) が範囲を表す必要がある。それ以外の場合、動作は未定義である。
2) 次と等価: return ranges:: distance ( ranges:: begin ( r ) , ranges:: end ( r ) ) ;
3) 次と同等: return ranges:: size ( r ) ; .

オーバーロードのインスタンス化 (2,3) は、インスタンス化ポイントより前にヘッダー <experimental/ranges/range> がインクルードされていない場合、ill-formedとなる可能性があります。

目次

翻訳内容: - "Contents" → "目次" - "Customization point objects" → 翻訳せず(C++専門用語のため) - "Return value" → "戻り値" - "Example" → "例" - "See also" → "関連項目" HTMLタグ、属性、
タグ内のテキストは保持し、C++専門用語は翻訳せず、正確性と専門性を保つように翻訳しました。

カスタマイゼーションポイントオブジェクト

名前 ranges::distance カスタマイゼーションポイントオブジェクト を表し、これは 関数オブジェクト であり、 リテラル型 Semiregular のクラス型(説明の目的で DistanceT と表記)です。 DistanceT のすべてのインスタンスは等価です。したがって、 ranges::distance は自由にコピーでき、そのコピーは互換的に使用できます。

型の集合 Args... が与えられたとき、 std:: declval < Args > ( ) ... が上記の ranges::distance の引数要件を満たす場合、 DistanceT ranges :: Invocable < const DistanceT, Args... > を満たす。そうでない場合、 DistanceT の関数呼び出し演算子はオーバーロード解決に参加しない。

ranges::distance が定義されるすべての翻訳単位において、これはカスタマイゼーションポイントオブジェクトの同一インスタンスを参照します。(これは、インライン関数や関数テンプレート内で自由に使用でき、 一定義規則 に違反しないことを意味します。)

戻り値

first last の間、または範囲 r の先頭と終端の間の距離。

関連項目

2つのイテレータ間の距離を返す
(関数テンプレート)
イテレータを指定された距離だけ進める
(関数テンプレート)
イテレータをインクリメントする
(関数テンプレート)
イテレータをデクリメントする
(関数テンプレート)
定数時間でサイズを計算できる範囲のサイズを取得する
(カスタマイゼーションポイントオブジェクト)