constexpr auto end(); // (1) C++23
constexpr auto end() const
requires range<const InnerView> &&
regular_invocable<
const F&,
range_reference_t<const Views>...
>; // (2) C++23
概要
番兵を取得する。
効果
説明専用コンセプトzip-is-common
を用いて、
zip-is-common<Views...>
がfalse
の場合:
- (1) :
return sentinel<false>(zip_.end());
- (2) :
return sentinel<true>(zip_.end());
それ以外の場合:
- (1) :
return iterator<false>(*this, zip_.end());
- (2) :
return iterator<true>(*this, zip_.end());
ここで、iterator
とsentinel
はzip_transform_view
の内部で定義される説明専用のクラスであり、InnerView
は説明専用のzip_view<Views...>
である。
例
#include <ranges>
#include <vector>
#include <list>
#include <iostream>
int main() {
std::vector<int> v = {1, 2, 3};
std::list<char> l = {'a', 'b', 'c', 'd'};
auto f = [](int n, char c) { return std::pair{n * 10, c}; };
std::ranges::zip_transform_view ztv(f, v, l);
auto begin = ztv.begin();
auto end = ztv.end();
// 全要素を出力(短い方のRangeのサイズで終わる)
for (auto it = begin; it != end; ++it) {
auto [n, c] = *it;
std::cout << n << ", " << c << std::endl;
}
}
出力
10, a
20, b
30, c
バージョン
言語
- C++23
処理系
- Clang: 19 ✅
- GCC: 13 ✅
- Visual C++: 2022 Update 6 ✅