使用模板计算向量的平均值
Calculating average of vectors using templates
我制作了一个简单的功能,该功能采用2个 std::array
,并返回另一个 std::array
,其中 std::arrays
s。
template<typename T, std::size_t N>
std::array<T, N> average(const std::array<T, N>& a1, const std::array<T, N>& a2)
{
std::array<T, N> array;
for (std::size_t i = 0; i < N; ++i)
array[i] = (a1[i] + a2[i]) / 2;
return array;
}
效果完美。现在,我想计算 n 向量的平均值。所以我做了这个
template<typename T, std::size_t N, typename... Ts>
std::array<T, N> average(const Ts&... args)
{
std::array<T, N> result;
for (std::size_t i = 0; i < N; ++i)
{
T addedValues = 0;
for (const auto& array : { args... })
addedValues += array[i];
result[i] = addedValues / sizeof...(args);
}
return result;
}
也有效,但我必须指定结果模板参数
std::array<int, 3> a{ 1, 2, 3 };
std::array<int, 3> b{ 3, 4, 5 };
auto c = average<int, 3>(a, b); //'<int, 3>' not good, possible without?
我想不出其他方式,有人可以帮我吗?
提供了您还将对模板功能正文进行必要的更改。您可以如下更改模板功能的签名:
template<typename T, std::size_t N, typename... Ts>
std::array<T, N> average(std::array<T, N> const &arr, const Ts&... args)
这样,您不必明确指定模板参数,并且模板参数扣除将推断T
和N
,因此您可以将average
模板函数称为:
std::array<int, 3> a{ 1, 2, 3 };
std::array<int, 3> b{ 3, 4, 5 };
auto c = average(a, b);
相关文章:
- 计算数组c++的平均值
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- 五个中三个最大参数的平均值,不使用排序算法或向量/数组
- 获取 c++ 中浮点数向量的向量的逐元素平均值
- 如何使用向量查找平均值和标准差
- 查找向量的平均值
- 查找记录等于或最接近使用向量C 的平均值
- 使用模板计算向量的平均值
- 通过更改代码格式来计算结构向量中包含的双精度变量的平均值的不同结果?
- 计算存储在向量中的值流的移动平均值
- 求向量c++的输入的平均值
- 计算点向量的平均值
- 如何找到向量的统计量?最大值/最小值、模式、中位数、平均值