24 #ifndef SOM_SAMPLINGPOLICY_H
25 #define SOM_SAMPLINGPOLICY_H
34 namespace SamplingPolicy {
36 template <
typename IterType>
40 virtual IterType
start(IterType begin, IterType end)
const = 0;
42 virtual IterType
next(IterType iter)
const = 0;
45 template <
typename IterType>
49 IterType
start(IterType begin, IterType)
const override {
53 IterType
next(IterType iter)
const override {
58 template <
typename IterType>
64 IterType
start(IterType begin, IterType end)
const override {
71 IterType
next(IterType)
const override {
81 template <
typename IterType>
86 template <
typename IterType>
91 m_iter_list.reserve(sample_size);
94 IterType
start(IterType begin, IterType end)
const override {
100 m_iter_list.reserve(m_sample_size);
104 for (
auto it = begin; it != end; ++it) {
113 int all_max_index = all_iter_list.size() - 1;
114 for (
std::size_t i = 0; i < m_sample_size && all_max_index >= 0; ++i, --all_max_index) {
116 auto it = all_iter_list.begin();
118 m_iter_list.push_back(*it);
119 all_iter_list.erase(it);
124 m_iter_list_size = m_iter_list.size();
125 return m_iter_list[m_current];
128 IterType
next(IterType)
const override {
130 if (m_current >= m_iter_list_size) {
133 return m_iter_list[m_current];
144 template <
typename IterType>
Jackknife(std::size_t sample_size)
IterType start(IterType begin, IterType end) const override
std::size_t m_iter_list_size
IterType next(IterType) const override
std::size_t m_sample_size
virtual IterType start(IterType begin, IterType end) const =0
IterType start(IterType begin, IterType end) const override
virtual IterType next(IterType iter) const =0
Jackknife< IterType > jackknifeFactory(IterType, std::size_t sample_size)
Bootstrap< IterType > bootstrapFactory(IterType begin, IterType end)
IterType next(IterType iter) const override
std::vector< IterType > m_iter_list
IterType next(IterType) const override
Bootstrap(IterType begin, IterType end)
IterType start(IterType begin, IterType) const override
std::uniform_int_distribution m_dist