std::ranges:: views:: enumerate, std::ranges:: enumerate_view
|
ヘッダーで定義
<ranges>
|
||
|
template
<
ranges::
view
V
>
requires
/*range-with-movable-references*/
<
V
>
|
(1) | (C++23以降) |
|
namespace
views
{
inline
constexpr
/* 未規定 */
enumerate
=
/* 未規定 */
;
|
(2) | (C++23以降) |
|
呼び出しシグネチャ
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 下記参照 */
|
(C++23以降) | |
|
ヘルパーコンセプト
|
||
|
template
<
class
R
>
concept
/*range-with-movable-references*/
=
|
(3) | ( 説明専用* ) |
enumerate_view
は、
view
を受け取り、
tuple
のビューを生成するレンジアダプタです。
結果のシーケンスの
i
th
要素(タプル)は以下を保持します:
-
基底シーケンスの要素の0から始まるインデックスである
iと等しい値、および - 基底要素への参照。
views::enumerate
は
RangeAdaptorObject
を表す。部分式
e
が与えられたとき、式
views
::
enumerate
(
e
)
は
式等価
である
enumerate_view
<
views::
all_t
<
decltype
(
(
e
)
)
>>
(
e
)
に、任意の適切な部分式
e
に対して。
enumerate_view
は、基となるビュー
V
がそれぞれのコンセプトをモデル化する場合、
random_access_range
、
bidirectional_range
、
forward_range
、
input_range
、
common_range
、および
sized_range
のコンセプトをモデル化します。
目次 |
データメンバ
| メンバー | 説明 |
V
base_
|
基となる
view
へのイテレータ
( 説明専用メンバーオブジェクト* ) |
メンバー関数
enumerate_view
を構築する
(public member function) |
|
|
基となる(アダプトされた)ビューのコピーを返す
(public member function) |
|
|
先頭を指すイテレータを返す
(public member function) |
|
|
終端を指すイテレータまたはセンチネルを返す
(public member function) |
|
要素数を返す(基となる(アダプトされた)範囲が
sized_range
を満たす場合にのみ提供)
(public member function) |
|
|
(C++26)
|
結果の
approximately_sized_range
の近似サイズを返す
(public member function) |
std::ranges::view_interface から継承 |
|
派生ビューが空かどうかを返す(
sized_range
または
forward_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
|
(C++23)
|
範囲の先頭を指す定数イテレータを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
(C++23)
|
範囲の定数イテレータのセンチネルを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューが空でないかどうかを返す(
ranges::empty
が適用可能な場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最初の要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最後の要素を返す(
bidirectional_range
かつ
common_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの
n
th
番目の要素を返す(
random_access_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
推論ガイド
ネストされたクラス
|
(C++23)
|
イテレータ型
( 説明専用メンバクラステンプレート* ) |
|
(C++23)
|
センチネル型
( 説明専用メンバクラステンプレート* ) |
ヘルパーテンプレート
|
template
<
class
View
>
constexpr
bool
enable_borrowed_range
<
ranges
::
enumerate_view
<
View
>>
=
|
(C++23以降) | |
この
ranges::enable_borrowed_range
の特殊化は、基となるビューが
borrowed_range
を満たす場合に、
enumerate_view
がそれを満たすようにします。
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_enumerate
|
202302L
|
(C++23) |
std::ranges::enumerate_view
|
例
#include <initializer_list> #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 // 各要素の位置をキーとしてmapを作成 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}; // constでもnumは変更可能(constは参照先に伝播しない) // constにするには `std::views::enumerate(numbers) | std::views::as_const` // または `std::views::enumerate(std::as_const(numbers))` を使用 for (auto const [index, num] : std::views::enumerate(numbers)) { ++num; // 型は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]
関連項目
|
(C++20)
|
初期値を繰り返しインクリメントして生成されるシーケンスからなる
view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
|
(C++23)
|
適応されたビューの対応する要素への参照のタプルからなる
view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
tuple-like
値からなる
view
と数値Nを受け取り、各タプルのN
th
要素からなる
view
を生成する
(クラステンプレート) (レンジアダプタオブジェクト) |