home | help
std::ranges...ter-iterator(3)  C++ Standard Libary std::ranges...ter-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_sen-
     tinel;
	       ++outer_iter)
	  {
	      auto chunk = *outer_iter; // chunk is an object of type
					//		chunk_view::outer_itera-
     tor::value_type
	      std::cout << '[';
	      for (auto  inner_iter  =	chunk.begin();	inner_iter  !=	std::de-
     fault_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
http://cppreference.com 	   2024.06.10	   std::ranges...ter-iterator(3)

home | help