# std::ranges::transform_view<V,F>::iterator

< cpp‎ | ranges‎ | transform view

template< bool Const > class /*iterator*/; |  | (C++20 起)

`transform_view::begin` 的返回类型，及底层视图为 `common_range` 时 `transform_view::end` 的返回类型。

const 限定重载返回 /*iterator*/<true> 。非 const 限定重载返回 /*iterator*/<false> 。

此类模板的名称（此处示为 `iterator` ）是未指定的。

典型实现保有二个数据成员：指向（可为 const 限定的） `V` 中的迭代器与指向亲 `transform_view` 的指针。

### 成员类型

成员类型 | 定义
`Parent`(私有) | 若 Const 为 `true` 则为 const ranges::transform_view<V, F> ，否则为 ranges::transform_view<V, F> 。名称仅用于阐释
`Base`(私有) | 若 Const 为 `true` 则为 const V ，否则为 V 。名称仅用于阐释
`iterator_concept` | 若 `Base` 实现 `random_access_range` 则为 std::random_access_iterator_tag ， 若 `Base` 实现 `bidirectional_range` 则为 std::bidirectional_iterator_tag ， 若 `Base` 实现 `forward_range` 则为 std::forward_iterator_tag ， 否则为 std::input_iterator_tag
`iterator_category` | 若 `Base` 不实现 `forward_range` 则不定义。 若 std::invoke_result_t<F&, ranges::range_reference_t<Base>> 不是左值引用则为 std::input_iterator_tag 。 否则，令 `C` 为 std::iterator_traits<ranges::iterator_t<Base>>::iterator_category ，若 `C` 为 std::contiguous_iterator_tag 则该类型为 std::random_access_iterator_tag ；否则该类型为 `C` 。
`value_type` | std::remove_cvref_t<std::invoke_result_t<F&, ranges::range_reference_t<Base>>>
`difference_type` | ranges::range_difference_t<Base>

### 成员函数

(构造函数) (C++20) | 构造迭代器 (公开成员函数)
base (C++20) | 返回底层迭代器 (公开成员函数)
operator* (C++20) | 访问变换的元素 (公开成员函数)
operator[] (C++20) | 按下标访问元素 (公开成员函数)
operator++operator++(int)operator--operator--(int)operator+=operator-= (C++20) | 推进或减少底层迭代器 (公开成员函数)

### 非成员函数

operator==operator<operator>operator<=operator>=operator<=> (C++20) | 比较底层迭代器 (函数)
operator+operator- (C++20) | 进行迭代器算术 (函数)
iter_move (C++20) | 获得到变换的元素的右值引用 (函数)

### 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
P2259R1 | C++20 | 始终定义成员类型 `iterator_category` | 仅若 `Base` 实现 `forward_range` 才定义
LWG 3555 | C++20 | `iterator_concept` 的定义忽略 const | 使之考虑