# std::ranges::zip_transform_view<F,Views...>::iterator

From cppreference.com
< cpp‎ | ranges‎ | zip transform view

template< bool Const > class /*iterator*/; // exposition only |  | (since C++23)

The iterator type of a possibly const-qualified `zip_transform_view`, returned by `zip_transform_view::begin` and in certain cases by `zip_transform_view::end`. The name of this class template (shown here as `iterator`) is unspecified.

The type /*iterator*/<true> or /*iterator*/<false> treats the underlying views as const-qualified or non-const-qualified respectively.

### Member types

Member type | Definition
`Parent` (private) | `zip_transform_view` if Const is false, const zip_transform_view otherwise. The name is for exposition only.
`Base` (private) | `InnerView` if Const is false, const InnerView otherwise. The name is for exposition only.
`iterator_category` | Let /*maybe-const*/<Const, F>& denote const F& if Const is true, F& otherwise. Let /*maybe-const*/<Const, Views> denote const Views if Const is true, Views otherwise. Let /*POT*/ denote the pack of types std::iterator_traits<std::iterator_t< /*maybe-const*/<Const, Views>>>::iterator_category... If /*Base*/ models `forward_range`, then `iterator_category` denotes: std::input_iterator_tag, if std::invoke_result_t</*maybe-const*/<Const, F>&, ranges::range_reference_t</*maybe-const*/<Const, Views>>...> is not a reference. Otherwise, std::random_access_iterator_tag, if (std::derived_from</*POT*/, std::random_access_iterator_tag> && ...) is true. Otherwise, std::bidirectional_iterator_tag, if (std::derived_from</*POT*/, std::bidirectional_iterator_tag> && ...) is true. Otherwise, std::forward_iterator_tag, if (std::derived_from</*POT*/, std::forward_iterator_tag> && ...) is true. Otherwise, std::input_iterator_tag. Not present if /*Base*/ does not model `forward_range`.
`iterator_concept` | /*ziperator*/<Const>::iterator_concept
`value_type` | Let /*RREF*/ be ranges::range_reference_t<Views>..., and /*CRREF*/ be ranges::range_reference_t<const Views>.... Then: std::remove_cvref_t<std::invoke_result_t<F&, /*RREF*/>> if Const is false, std::remove_cvref_t<std::invoke_result_t<const F&, /*CRREF*/>> otherwise.
`difference_type` | range::range_difference_t</*Base*/>

### Data members

Typical implementations of `iterator` hold two non-static data members:

- a pointer `parent_` of type `Parent` to the parent object
- an iterator `inner_` of type `ziperator<Const>`.

These names are for exposition purposes only.

### Member functions

(constructor) (C++23) | constructs an iterator (public member function)
operator* (C++23) | obtains the result of applying the invocable object to the underlying poined-to elements (public member function)
operator[] (C++23) | obtains the result of applying the invocable object to the underlying elements at given offset (public member function)
operator++operator++(int)operator--operator--(int)operator+=operator-= (C++23) | advances or decrements the underlying iterator (public member function)

### Non-member functions

operator==operator<=> (C++23) | compares the underlying iterators (function)
operator+operator- (C++23) | performs iterator arithmetic on underlying iterators (function)

### Example

| This section is incomplete Reason: no example

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/zip_transform_view/iterator&oldid=151317"