#pragma once #include "exports.hpp" #include #include // Histogram over integers with binsize 1 class Histogram { public: Histogram() : xmin(0) {} ~Histogram() {} void reset() { frequencies.clear(); xmin = 0; } void add(int sample) { if (frequencies.empty()) { xmin = sample; frequencies.push_back(1); return; } if (sample < xmin) { int extra = xmin - sample; frequencies.insert(frequencies.begin(), extra, 0); xmin = sample; frequencies.front()++; return; } if (sample - xmin >= (int)frequencies.size()) { int extra = sample - xmin - frequencies.size() + 1; frequencies.insert(frequencies.end(), extra, 0); frequencies.back()++; return; } frequencies[sample - xmin]++; } // For exports std::vector> getHistogram() const { std::vector> histogram; int i = xmin; for (auto f : frequencies) histogram.push_back({i++, f}); return histogram; } std::vector frequencies; int xmin; };