#include <iostream>
#include <random>
#include <vector>
thread_local std::mt19937 gen{std::random_device{}()};
template<typename T>
T random(T min, T max)
{
return std::uniform_int_distribution<T>{min, max}(gen);
}
class IsDivisibleBy{
public:
IsDivisibleBy(int a) : parametr(a){std::cout << "Constr ";};
//IsDivisibleBy(const IsDivisibleBy & ref){parametr=ref.parametr; std::cout << "copy";}
~IsDivisibleBy(){std::cout << "Destr ";}
bool operator()(int b){return !(b % parametr);}
private:
int parametr;
};
template <typename T, typename P>
int Count(T & v, P predicate){
int total{0};
for (auto & x : v) if (predicate(x)) total++;
return total;
}
int main() {
std::vector<int> MyVec;
for (int i=0; i<4000; i++) MyVec.push_back(random(1,1000));
for (int divisor=1; divisor<20; divisor++){
std::cout << Count(MyVec, IsDivisibleBy(divisor)) << '\n';
}
return 0;
}
Program wypisuje dwa razy więcej destruktorów
Constr Destr 4000
Destr Constr Destr 2016
Destr Constr Destr 1314
Destr Constr Destr 993
Destr Constr Destr 859
Destr Constr Destr 660
Destr Constr Destr 564
Destr Constr Destr 491
Destr Constr Destr 443
Destr Constr Destr 419
Destr Constr Destr 379
Destr Constr Destr 317
Destr Constr Destr 281
Destr Constr Destr 288
Destr Constr Destr 281
Destr Constr Destr 252
Destr Constr Destr 258
Destr Constr Destr 216
Destr Constr Destr 215
Destr