#include <algorithm>
#include <chrono>
#include <iostream>
#include <iterator>
#include <vector>
using clock_type = std::chrono::high_resolution_clock;
std::size_t test_cases = 100;
std::vector<int> big_vector;
void prepare_big_vector() {
for(int i = 0; i < 1 * 1000 * 1000; ++i)
big_vector.push_back(i % 1299653);
}
// Tests
clock_type::duration test_resize() {
clock_type::time_point start = clock_type::now();
{
for(std::size_t i = 0; i < test_cases; ++i) {
std::vector<int> copied_vector;
copied_vector.resize(big_vector.size());
std::copy(std::begin(big_vector), std::end(big_vector), std::begin(copied_vector));
}
}
clock_type::time_point end = clock_type::now();
return end - start;
}
clock_type::duration test_reserve() {
clock_type::time_point start = clock_type::now();
{
for(std::size_t i = 0; i < test_cases; ++i) {
std::vector<int> copied_vector;
copied_vector.reserve(big_vector.size());
std::copy(std::begin(big_vector), std::end(big_vector), std::begin(copied_vector));
}
}
clock_type::time_point end = clock_type::now();
return end - start;
}
clock_type::duration test_reserve2() {
clock_type::time_point start = clock_type::now();
{
for(std::size_t i = 0; i < test_cases; ++i) {
std::vector<int> copied_vector;
copied_vector.reserve(big_vector.size());
std::copy(std::begin(big_vector), std::end(big_vector), std::back_inserter(copied_vector));
}
}
clock_type::time_point end = clock_type::now();
return end - start;
}
// Main
int main() {
prepare_big_vector();
clock_type::duration resize_duration = test_resize();
clock_type::duration reserve_duration = test_reserve();
clock_type::duration reserve2_duration = test_reserve2();
double resize_ms = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(resize_duration).count();
double reserve_ms = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(reserve_duration).count();
double reserve_ms2 = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(reserve2_duration).count();
std::cout << "Resize [ms]: " << resize_ms << std::endl;
std::cout << "Reserve [ms]: " << reserve_ms << std::endl;
std::cout << "Reserve (back_inserter) [ms]: " << reserve_ms2 << std::endl;
system("pause");
return 0;
}