使用 boost::accumulators::tag::count 计数
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <iostream>
using namespace boost::accumulators;
int main()
{
accumulator_set<int, features<tag::count>> acc;
acc(0);
acc(0);
acc(0);
acc(0);
acc(0);
acc(0);
std::cout << count(acc) << '\n'; // 由于传递了三个值,此示例将 3 写入标准输出
}
- 由于传递了6个值,此示例将输出6
说明:
- boost::accumulators::tag::count,这是一个简单的累加器,用于计算传递给它的值的数量。
- 类 boost::accumulators::accumulator_set,这是一个模板
- 它期望将要处理的值的类型作为其第一个参数。示例 将 int 作为第一个参数传递。
- 第二个参数指定要使用的累加器。您可以使用多个累加器。类名 boost::accumulators::accumulator_set 表示可以管理任意数量的累加器。
- 示例 使用 boost::accumulators::tag::count 选择一个计算值的累加器。
- 严格来说,您指定的是特征,而不是累加器。特征定义了应该计算什么。
- 请注意,您不能将特征直接传递给 boost::accumulators::accumulator_set。您需要使用 boost::accumulators::features。
- 对于每个特征,都有一个同名的提取器。提取器接收累加器的当前结果。
- 示例 使用提取器 boost::accumulators::count()。传递的唯一参数是 acc。 boost::accumulators::count() 返回 6。
使用均值和方差
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <iostream>
using namespace boost::accumulators;
int main()
{
accumulator_set<double, features<tag::mean, tag::variance>> acc;
acc(8);
acc(9);
acc(10);
acc(11);
acc(12);
std::cout << mean(acc) << '\n';
std::cout << variance(acc) << '\n';
}
- 输出: 10, 2
说明:
- 使用两个特征 boost::accumulators::tag::mean 和 boost::accumulators::tag::variance 来计算五个值的均值和方差。
- 方差为 2,因为 Boost.Accumulators 为五个值中的每一个分配了 0.2 的权重。使用 boost::accumulators::tag::variance 选择的累加器使用权重。如果未明确设置权重,则所有值都具有相同的权重。
计算加权方差
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics.hpp>
#include <iostream>
using namespace boost::accumulators;
int main()
{
accumulator_set<double, features<tag::mean, tag::variance>, int> acc;
acc(8, weight = 1);
acc(9, weight = 1);
acc(10, weight = 4);
acc(11, weight = 1);
acc(12, weight = 1);
std::cout << mean(acc) << '\n';
std::cout << variance(acc) << '\n';
}
说明:
- 上面 将 int 作为第三个模板参数传递给 boost::accumulators::accumulator_set。此参数指定权重的数据类型。