std::ranges::chunk_view::outer-iterator(3)

NAME
std::ranges::chunk_view::outer-iterator - std::ranges::chunk_view::outer-iterator

Synopsis
   class /*outer-iterator*/ (since C++23)
                        (exposition only*)
   The return type of chunk_view::begin if V models input_range.

Member types
   Member type Definition
   iterator_concept std::input_iterator_tag
   difference_type ranges::range_difference_t<V>
   Data members
   Member object Definition
   parent_ (private) A pointer to the "parent object" of type ranges::chunk_view*
                     (exposition-only member object*)

Member functions
   constructor constructs an iterator
   (C++23) (public member function)
   operator= move assigns another iterator
   (C++23) (public member function)
   operator* accesses the element
   (C++23) (public member function)
   operator++ increments the iterator
   (C++23) (public member function)

Non-member functions
   operator== compares the iterator with default sentinel
   (C++23) (function)
   operator- calculates the number of chunks remaining
   (C++23) (function)
   Nested classes
   value_type the value type of /*output-iterator*/
   (C++23) (public member class)

Example
// Run this code
 #include <iostream>
 #include <iterator>
 #include <ranges>
 #include <sstream>
 int main()
 {
     const std::string source{"ABCDEFGHIJ"};
     auto letters = std::istringstream{source};
     auto chunks = std::ranges::istream_view<char>(letters)
                 | std::views::chunk(4);
     for (auto outer_iter = chunks.begin(); outer_iter != std::default_sentinel;
          ++outer_iter)
     {
         auto chunk = *outer_iter; // chunk is an object of type
                        // chunk_view::outer_iterator::value_type
         std::cout << '[';
         for (auto inner_iter = chunk.begin(); inner_iter != std::default_sentinel;
              ++inner_iter)
             std::cout << *inner_iter;
         std::cout << "] ";
     }
     std::cout << '\n';
     // The same output using range-for loops
     auto letters2 = std::istringstream{source};
     auto chunks2 = std::ranges::istream_view<char>(letters2)
                  | std::views::chunk(4);
     for (auto chunk : chunks2)
     {
         std::cout << '[';
         for (auto ch : chunk)
             std::cout << ch;
         std::cout << "] ";
     }
     std::cout << '\n';
 }

Output:
 [ABCD] [EFGH] [IJ]
 [ABCD] [EFGH] [IJ]

References
     * C++23 standard (ISO/IEC 14882:2023):
     * 26.7.28.3 Class chunk_view::outer-iterator [range.chunk.outer.iter]

See also