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

履歴 編集

class template
<ranges>

std::ranges::chunk_view(C++23)

namespace std::ranges {
  template<view V>
    requires input_range<V>
  class chunk_view : public view_interface<chunk_view<V>> {…… }; // (1)

  namespace views {
    inline constexpr /*unspecified*/ chunk = /*unspecified*/;      // (2)
  }
}

概要

chunk_viewはRangeを指定個数ごとに分割したviewのRange。

元となるRangeの要素数が指定個数で割り切れない場合、最後のviewは余った要素のみを持ち、その要素数は指定個数よりも少なくなる。

Rangeコンセプト

外側Range

borrowed sized output input forward bidirectional random_access contiguous common viewable view
  • ※: 元となるRangeに従う

内側Range

borrowed sized output input forward bidirectional random_access contiguous common viewable view
  • ※: 元となるRangeに従う

効果

  • (2): 式views::chunk(E, N)の効果はchunk_view(E, N)と等しい。

事前条件

  • (2): n > 0

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ C++23
base Vの参照を取得する C++23
begin 先頭を指すイテレータを取得する C++23
end 番兵を取得する C++23
size 要素数を取得する C++23

継承しているメンバ関数

名前 説明 対応バージョン
empty Rangeが空かどうかを判定する C++20
operator bool Rangeが空でないかどうかを判定する C++20
front 先頭要素への参照を取得する C++20
back 末尾要素への参照を取得する C++20
cbegin 定数イテレータを取得する C++23
cend 定数イテレータ(番兵)を取得する C++23
operator[] 要素へアクセスする C++20

推論補助

名前 説明 対応バージョン
(deduction_guide) クラステンプレートの推論補助 C++23

#include <ranges>
#include <vector>
#include <print>

int main() {
  std::vector v = {1, 2, 3, 4, 5, 6};
  std::println("{}", v | std::views::chunk(1));
  std::println("{}", v | std::views::chunk(3));
  std::println("{}", v | std::views::chunk(5));
  std::println("{}", v | std::views::chunk(7));
}

出力

[[1], [2], [3], [4], [5], [6]]
[[1, 2, 3], [4, 5, 6]]
[[1, 2, 3, 4, 5], [6]]
[[1, 2, 3, 4, 5, 6]]

例 縦横に並んだ数値を読む

#include <ranges>
#include <vector>
#include <string>
#include <sstream>
#include <print>

int main() {
  // cin代わりの文字列ストリーム
  std::istringstream iss(R"(
2 10
31 41 59 26 53 58 97 93 23 84
62 64 33 83 27 95 2 88 41 97
)");

  int h, w;
  iss >> h >> w;

  const auto table = std::views::istream<int>(iss)
    | std::views::chunk(w)
    | std::views::take(h) 
    | std::ranges::to<std::vector<std::vector<int>>();

  std::println("{}", table);
}

出力

[[31, 41, 59, 26, 53, 58, 97, 93, 23, 84], [62, 64, 33, 83, 27, 95, 2, 88, 41, 97]]

バージョン

言語

  • C++23

処理系

参照