STD ::转换如何用特定值初始化函子

How std::transform is initializing the functor with a specific value?

本文关键字:初始化 何用特 转换 STD      更新时间:2023-10-16

i具有以下程序,其中应在increment类的构造函数中以特定值初始化计数器值。

但是,当它用作 std::transform中的函子时,这是怎么可能的?

#include <iostream>
#include <algorithm>
class increment
{
    int counter;
public:
    increment(int val) : counter(val) {}
    int operator()(int inc_val)
    {
        return (counter + inc_val);
    }
};
int main()
{
    int arr[5] = {1,2,3,4,5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int step = 2;
    std::transform(arr, arr + n, arr, increment(step));
    for(auto i = 0; i < 5; ++i)
    std::cout << "arr[" << i << "] : " << arr[i] << 'n';
    return 0;
}

应用特定值初始化计数器值...

您的 increment fundor IS 以特定值初始化,在这种情况下为 step

std::transform(arr, arr + n, arr, increment(step));

传递A fundor 不是特别的东西,而只是创建一个时间 callable 对象,然后传递该 callable 对象。

如果这使您感到困惑,以下代码对您来说是否更清楚?

// Create the variable named my_functor
increment my_fuctor { step };
// Pass my_functor to std::transform
std::transform(arr, arr + n, arr, my_fuctor);