std::ranges::views::transform, std::ranges::transform_view

来自cppreference.com
< cpp‎ | ranges
 
 
范围库
范围适配器
 
 
在标头 <ranges> 定义
(1)
template<ranges::input_range V,

          std::copy_constructible F >
    requires ranges::view<V>&&
             std::is_object_v<F>&&
             std::regular_invocable<F&, ranges::range_reference_t<V>>&&
             /* invoke_result_t<F&, range_reference_t<V>>& 为有效类型 */
class transform_view

    :publicranges::view_interface<transform_view<V, F>>
(C++20 起)
(C++23 前)
template<ranges::input_range V,

          std::move_constructible F >
    requires ranges::view<V>&&
             std::is_object_v<F>&&
             std::regular_invocable<F&, ranges::range_reference_t<V>>&&
             /* invoke_result_t<F&, range_reference_t<V>>& 为有效类型 */
class transform_view

    :publicranges::view_interface<transform_view<V, F>>
(C++23 起)
namespace views {

    inlineconstexpr/* 未指明 */ transform =/* 未指明 */;

}
(2) (C++20 起)
调用签名
template<ranges::viewable_range R, class F >

    requires /* 见下文 */

constexprranges::viewauto transform( R&& r, F&& fun );
(C++20 起)
template<class F >
constexpr/* 范围适配器闭包 */ transform( F&& fun );
(C++20 起)
1) 表示底层序列应用变换函数到每个元素后的 view 的范围适配器。
2)范围适配器对象(RangeAdaptorObject) 。对任意适合的表达式 ef,表达式 views::transform(e, f)表达式等价transform_view(e, f)

transform_view 分别在底层视图 V 实现 random_access_rangebidirectional_rangeforward_rangeinput_rangecommon_rangesized_range 时实现相应概念。

目录

[编辑]数据成员

成员 说明
Vbase_(私有) 底层视图
(仅用于阐述的成员对象*)
copyable-box<F>(C++23 前)movable-box<F>(C++23 起)fun_(私有) 底层函数对象
(仅用于阐述的成员对象*)

[编辑]成员函数

构造 transform_view
(公开成员函数)[编辑]
返回底层(适配的)视图的副本
(公开成员函数)[编辑]
返回指向起始的迭代器
(公开成员函数)[编辑]
返回 指向末尾的迭代器或哨位
(公开成员函数)[编辑]
返回元素数,仅当底层(适配的)范围满足 sized_range 时才提供
(公开成员函数)[编辑]
返回结果 approximately_sized_range 的估计大小
(公开成员函数)[编辑]
继承自 std::ranges::view_interface
返回视图是否为空,仅当视图满足 forward_range 时提供
(std::ranges::view_interface<D> 的公开成员函数)[编辑]
(C++23)
返回指向范围起始的常量迭代器
(std::ranges::view_interface<D> 的公开成员函数)[编辑]
(C++23)
返回对应于范围常量迭代器的哨位
(std::ranges::view_interface<D> 的公开成员函数)[编辑]
返回派生视图是否为非空,仅当 ranges::empty 可应用于它时提供
(std::ranges::view_interface<D> 的公开成员函数)[编辑]
返回派生视图中的首元素,仅当视图满足 forward_range 时提供
(std::ranges::view_interface<D> 的公开成员函数)[编辑]
返回派生视图中的末元素,仅当视图满足 bidirectional_rangecommon_range 时提供
(std::ranges::view_interface<D> 的公开成员函数)[编辑]
返回派生视图中的第 n 个元素,仅当视图满足 random_access_range 时提供
(std::ranges::view_interface<D> 的公开成员函数)[编辑]

[编辑]推导指引

[编辑]嵌套类

迭代器类型
(仅用于阐述的成员类模板*)
哨位类型
(仅用于阐述的成员类模板*)

[编辑]示例

#include <algorithm>#include <cstdio>#include <iterator>#include <ranges>#include <string>   char rot13a(constchar x, constchar a){return a +(x - a +13)%26;}   char rot13(constchar x){if('Z'>= x and x >='A')return rot13a(x, 'A');   if('z'>= x and x >='a')return rot13a(x, 'a');   return x;}   int main(){auto show =[](constunsignedchar x){std::putchar(x);};   std::string in{"cppreference.com\n"}; std::ranges::for_each(in, show); std::ranges::for_each(in | std::views::transform(rot13), show);   std::string out; std::ranges::copy(std::views::transform(in, rot13), std::back_inserter(out)); std::ranges::for_each(out, show); std::ranges::for_each(out | std::views::transform(rot13), show);}

输出:

cppreference.com pccersrerapr.pbz pccersrerapr.pbz cppreference.com

[编辑]参阅

应用函数到元素范围
(算法函数对象)[编辑]
close