#include<chrono>
#include<deque>
#include<iostream>
#include<vector>
#include<utility>	//forward
using namespace std;

template<class Func,class ... Args>
chrono::milliseconds::rep calc_time(Func &&func,Args &&...args)
{
	chrono::high_resolution_clock::time_point begin{chrono::high_resolution_clock::now()};
	std::forward<Func>(func)(std::forward<Args>(args)...);
	chrono::high_resolution_clock::time_point end{chrono::high_resolution_clock::now()};
	return chrono::duration_cast<std::chrono::milliseconds>(end-begin).count();
}

constexpr int iteration{100000000};
const vector<int> test(100,0);
size_t de;
size_t ve;
size_t ve2;

void test_deque()
{
	deque<vector<int>> deq;
	for(int i{0};i!=iteration;++i)
		deq.emplace_back(test);
	de=deq.size();
}

void test_vector()
{
	vector<vector<int>> vec;
	for(int i{0};i!=iteration;++i)
		vec.emplace_back(test);
	ve=vec.size();
}

void test_vector2()
{
	vector<vector<int>> vec;
	vec.reserve(iteration);
	for(int i{0};i!=iteration;++i)
		vec.emplace_back(test);
	ve2=vec.size();
}

int main()
{
	cout<<calc_time(test_deque)<<endl;
	cout<<calc_time(test_vector)<<endl;
	cout<<calc_time(test_vector2)<<endl;
}