#include <iostream>
#include <chrono>
#include <vector>
#include <stdlib.h>
#include <time.h>
class TimeMeasurer
{
public:
TimeMeasurer() { start = std::chrono::high_resolution_clock::now(); }
~TimeMeasurer()
{
using namespace std::chrono;
auto stop = high_resolution_clock::now();
auto duration = duration_cast<microseconds>(stop - start);
std::cout << "tm " << duration.count() << std::endl;
};
TimeMeasurer(const TimeMeasurer&) = delete;
TimeMeasurer operator=(const TimeMeasurer&) = delete;
TimeMeasurer(TimeMeasurer&&) = delete;
TimeMeasurer operator=(TimeMeasurer&&) = delete;
private:
std::chrono::high_resolution_clock::time_point start;
};
std::vector<bool> bvec;
std::vector<char> cvec;
int main() {
const size_t count = 1000000;
bvec.reserve(count);
cvec.reserve(count);
for (size_t i = 0; i < count; ++i)
{
bool value = rand() % 2 == 0;
bvec.push_back(value);
cvec.push_back(static_cast<char>(value));
}
int sum1 = 0;
{
TimeMeasurer tm;
for (size_t i = 0; i < count; ++i)
{
sum1 += (bvec[i]) ? 1 : 0;
}
}
std::cout << sum1 << "\n";
int sum2 = 0;
{
TimeMeasurer tm;
for (size_t i = 0; i < count; ++i)
{
sum2 += (cvec[i] != 0) ? 1 : 0;
}
}
std::cout << sum2 << "\n";
return 0;
}