c++ - 如何概括作用于不同类型 vector 的函数?

标签 c++ c++11 templates c++17 stdvector

我是 C++ 的新手,我似乎无法正确表述我的问题。由于 vectorize 和 map 的含义似乎与我正在寻找的不同(因此很难通过谷歌搜索解决方案)。

我有很多作用于任意类型的单个对象的函数。我想要一种通用方法(即模板或包装函数)将它们转换为作用于任意数量的相同类型对象的 vector 的函数。

一个例子:

int func1(int a) {return a+1;}
long func2(long a) {return a*10;}

vector<int> func1(vector<int> a_vec)
{
    vector<int> out_vec;
    for (int i = 0; i < a_vec.size(); i++)
        out_vec.push_back(func1(a_vec[i]));
    return out_vec;
}

vector<long> func2(vector<long> a_vec)
{
    vector<long> out_vec;
    for (int i = 0; i < a_vec.size(); i++)
        out_vec.push_back(func2(a_vec[i]));
    return out_vec;
}

模板似乎是必要的,但我对它们还没有太多经验,也不知道如何在这种情况下应用它们。欢迎任何引用/建议/评论。

(另外请添加相关标签 - 因为我不确定正确的术语,所以我不确定如何标记它)。

最佳答案

这段代码确实看起来非常适合某些模板。

template <typename T, typename TFunc>
std::vector<T> transform(const std::vector<T> &v, TFunc &&func)
{
    std::vector<T> result;
    result.reserve(v.size());
    for (auto &&element : v)
        result.push_back(std::invoke(func, element));
    return result;
}

您可能会注意到该函数看起来与 std::transform 非常相似,后者适用于迭代器而不是 vector 。它可以被称为:

 auto result = transform(v, &func1);

关于c++ - 如何概括作用于不同类型 vector 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52131910/

相关文章:

c++ - 使用不同的enable_if条件选择方法

c++ - 如何在 lambda 函数中捕获可变数量的参数

c++ - 使用命名空间的区别 (std::vs::std::)

C++ 函数模板导致输入参数出错

c++ - 可变参数模板类中需要什么前向声明?

预编译为纯 JavaScript 的 JavaScript 模板语言

c++ - cpp文件之间的连接

c++ - 如何通过声明克服循环依赖?

java - jdk的UseCompressedOops的作用是什么?

java - 重命名 R3 Corda 模板包时出错