我是 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/