名前空間
変種
操作

std::ranges::views::enumerate, std::ranges::enumerate_view

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
 
ヘッダ <ranges> で定義
template< ranges::view V >

    requires /*range-with-movable-references*/<V>
class enumerate_view

    : public ranges::view_interface<enumerate_view<V>>
(1) (C++23から)
namespace views {

    inline constexpr /* unspecified */ enumerate = /* unspecified */;

}
(2) (C++23から)
呼び出しシグネチャ
template< ranges::viewable_range R >

    requires /* 以下を参照 */

constexpr /* see below */ enumerate( R&& r );
(C++23から)
ヘルパーコンセプト
template< class R >

    concept /*range-with-movable-references*/ =
        ranges::input_range<R> &&
        std::move_constructible<ranges::range_reference_t<R>> &&

        std::move_constructible<ranges::range_rvalue_reference_t<R>>;
(3) (説明用*)
1) enumerate_view は、view を受け取り、tuple のビューを生成するレンジアダプターです。結果のシーケンスの i番目の要素(タプル)は、以下を保持します。
  • 基底シーケンスの要素の0ベースのインデックスである i と等しい値、および
  • 基底要素への参照。
2) views::enumerate という名前は、RangeAdaptorObject を示します。サブ式 e が与えられた場合、式 views::enumerate(e) は、適切なサブ式 e に対して enumerate_view<views::all_t<decltype((e))>>(e)式的に等価です。
3) 基底型の参照型が移動可能であることを保証します。

基底ビュー V がそれぞれの概念をモデル化する場合、enumerate_viewrandom_access_rangebidirectional_rangeforward_rangeinput_rangecommon_range、および sized_range の概念をモデル化します。

目次

[編集] データメンバ

メンバ名 定義
base_ (プライベート) V の基底シーケンスへのイテレータ。
(説明用のメンバオブジェクト*)

[編集] メンバ関数

enumerate_view を構築する
(public メンバ関数) [編集]
基になる(適応された)ビューのコピーを返す
(public member function) [編集]
先頭へのイテレータを返す
(public メンバ関数) [編集]
終端へのイテレータまたはセンチネルを返す
(public メンバ関数) [編集]
基底(アダプトされた)レンジが sized_range を満たす場合にのみ、要素数を返す
(public メンバ関数) [編集]
std::ranges::view_interface から継承
派生ビューが空かどうかを返す。sized_range または forward_range を満たす場合にのみ提供される
(std::ranges::view_interface<D> の public メンバ関数) [編集]
(C++23)
範囲の先頭への定数イテレータを返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
(C++23)
範囲の定数イテレータの番兵を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが空でないかどうかを返す。ranges::empty が適用可能な場合にのみ提供される
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが forward_range を満たす場合に、派生ビューの最初の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが bidirectional_rangecommon_range の両方を満たす場合にのみ、派生ビューの最後の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]
派生ビューが random_access_range を満たす場合にのみ、派生ビューの n番目の要素を返す
(std::ranges::view_interface<D> の public メンバ関数) [編集]

[編集] 推論補助

[編集] ネストされたクラス

(C++23)
イテレータ型
(説明専用メンバクラステンプレート*)
センチネル型
(説明専用メンバクラステンプレート*)

[編集] ヘルパーテンプレート

template< class View >

constexpr bool enable_borrowed_range<ranges::enumerate_view<View>> =

    ranges::enable_borrowed_range<View>;
(C++23から)

ranges::enable_borrowed_range のこの特殊化により、基底ビューが borrowed_range を満たす場合、enumerate_viewborrowed_range を満たします。

[編集] 備考

機能テストマクロ 規格 機能
__cpp_lib_ranges_enumerate 202302L (C++23) std::ranges::enumerate_view

[編集]

#include <iostream>
#include <map>
#include <ranges>
#include <vector>
 
int main()
{
    constexpr static auto v = {'A', 'B', 'C', 'D'};
 
    for (auto const [index, letter] : std::views::enumerate(v))
        std::cout << '(' << index << ':' << letter << ") ";
    std::cout << '\n';
 
#if __cpp_lib_ranges_to_container
    // create a map using the position of each element as key
    auto m = v | std::views::enumerate | std::ranges::to<std::map>();
 
    for (auto const [key, value] : m)
        std::cout << '[' << key << "]:" << value << ' ';
    std::cout << '\n';
#endif
 
    std::vector<int> numbers{1, 3, 5, 7};
 
    // num is mutable even with const, which does not propagate to reference to
    // make it const, use `std::views::enumerate(numbers) | std::views::as_const`
    // or `std::views::enumerate(std::as_const(numbers))`
    for (auto const [index, num] : std::views::enumerate(numbers))
    {
        ++num; // the type is int&
        std::cout << numbers[index] << ' ';
    }
    std::cout << '\n';
}

実行結果の例

(0:A) (1:B) (2:C) (3:D)
[0]:A [1]:B [2]:C [3]:D
2 4 6 8

[編集] 参照

  • C++23標準 (ISO/IEC 14882:2024)
  • 26.7.23 Enumerate view [range.enumerate]

[編集] 関連項目

初期値を繰り返しインクリメントして生成されるシーケンスからなる view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト)[編集]
適合するviewの対応する要素への参照のタプルからなる view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト)[編集]
tuple-like な値からなるviewと数値Nを取り、各タプルのN番目の要素のviewを生成する
(クラステンプレート) (rangeアダプタオブジェクト)[編集]
English 日本語 中文(简体) 中文(繁體)