#include <chrono>
#include <cstdint>
#include <iostream>
#include <random>
#include <vector>
using accu_t = std::uint32_t;
using element_t = std::uint32_t;
std::size_t const num_elements = 10000000;
int main()
{
std::vector<element_t> elements;
elements.reserve(num_elements);
std::uniform_int_distribution<element_t> distribution;
std::mt19937_64 engine;
for (std::size_t i = 0; i != num_elements; ++i)
{
elements.push_back(distribution(engine));
}
#ifdef USE_PTR
std::vector<element_t *> ptrs;
ptrs.reserve(num_elements);
for (auto & element : elements) ptrs.push_back(&element);
#endif
accu_t sum = 0;
auto start = std::chrono::steady_clock::now();
#ifdef USE_PTR
for (auto ptr : ptrs) sum += *ptr;
#else
for (auto element : elements) sum += element;
#endif
auto stop = std::chrono::steady_clock::now();
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start);
std::cout << "sum: " << sum << "\n";
std::cout << ms.count() << "ms\n";
}