- ranges[meta header]
- std::ranges[meta namespace]
- class template[meta id-type]
- cpp23[meta cpp]
namespace std::ranges {
template<view V>
requires range-with-movable-references<V>
class enumerate_view : public view_interface<enumerate_view<V>> { …… }; // (1)
namespace views {
inline constexpr /*unspecified*/ enumerate = /*unspecified*/; // (2)
}
}
enumerate_viewはインデックスを付けるview。
enumerate_viewの要素は、インデックスと元のRangeの要素からなるtuple (tuple<range_difference_t<Base>, range_value_t<Base>>)である。
- (1):
enumerate_viewのクラス定義
- (2):
enumerate_viewを生成するRangeアダプタオブジェクト
| borrowed |
sized |
output |
input |
forward |
bidirectional |
random_access |
contiguous |
common |
viewable |
view |
|
※ |
※ |
〇 |
※ |
※ |
※ |
|
※ |
○ |
○ |
- (2): 式
views::enumerate(E)の効果はenumerate_view<views::all_t<decltype((E))>>(E) と等しい
#include <iostream>
#include <ranges>
#include <vector>
int main() {
const std::vector v = {'a', 'b', 'c'};
for (auto [index, x] : v | std::views::enumerate) {
std::cout << index << ' ' << x << std::endl;
}
}
- std::views::enumerate[color ff0000]
- Clang: 17 [mark verified]
- GCC: 13 [mark verified]
- Visual C++: 2022 Update 7 [mark verified]