最終更新日時(UTC):
が更新

履歴 編集

function
<ranges>

std::ranges::zip_transform_view::end(C++23)

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());

ここで、iteratorsentinelzip_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

処理系

参照