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

< cpp‎ | ranges‎ | transform view

transform_view() requires std::default_initializable<V> && std::default_initializable<F> = default; | (1) | (C++20 起)
constexpr transform_view( V base, F fun ); | (2) | (C++20 起)

构造 `transform_view` 。

1) 默认构造函数。值初始化底层视图与变换函数。
2) 从 `base` 移动构造视图并从 `fun` 移动构造变换函数。

### 参数

base | - | 视图
fun | - | 变换函数

### 示例

演示使用 1 的反正切的级数展开的 π 近似：
`atan(1) = π/4 ~ 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...`

    #include <iomanip>
    #include <iostream>
    #include <numbers>
    #include <ranges>

    int main()
    {
        std::cout << std::setprecision(15) << std::fixed;
        auto atan1term = std::ranges::views::transform(
            [](int n) { return ((n % 2) ? -1 : 1) * 1.0 / (2 * n + 1); }
        );
        for (const int iterations : {1, 2, 3, 4, 5, 10, 100, 1000, 1'000'000}) {
            double accum{0.0};
            for (double term : std::ranges::views::iota(0, iterations) | atan1term) {
                accum += term;
            }
            std::cout << "π ~ " << 4 * accum << " (iterations: " << iterations << ")\n";
        }
        std::cout << "π ~ " << std::numbers::pi << " (std::numbers::pi)\n";
    }

可能的输出：

    π ~ 4.000000000000000 (iterations: 1)
    π ~ 2.666666666666667 (iterations: 2)
    π ~ 3.466666666666667 (iterations: 3)
    π ~ 2.895238095238096 (iterations: 4)
    π ~ 3.339682539682540 (iterations: 5)
    π ~ 3.041839618929403 (iterations: 10)
    π ~ 3.131592903558554 (iterations: 100)
    π ~ 3.140592653839794 (iterations: 1000)
    π ~ 3.141591653589774 (iterations: 1000000)
    π ~ 3.141592653589793 (std::numbers::pi)

### 缺陷报告

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

DR | 应用于 | 出版时的行为 | 正确行为
--- | --- | --- | ---
P2325R3 | C++20 | 若 `F` 非 `default_initializable` ，则默认构造函数构造不含 `F` 的 `transform_view` | `transform_view` 亦非 `default_initializable`