#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;
}
I2luY2x1ZGU8Y2hyb25vPgojaW5jbHVkZTxkZXF1ZT4KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8dXRpbGl0eT4JLy9mb3J3YXJkCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTxjbGFzcyBGdW5jLGNsYXNzIC4uLiBBcmdzPgpjaHJvbm86Om1pbGxpc2Vjb25kczo6cmVwIGNhbGNfdGltZShGdW5jICYmZnVuYyxBcmdzICYmLi4uYXJncykKewoJY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6OnRpbWVfcG9pbnQgYmVnaW57Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpfTsKCXN0ZDo6Zm9yd2FyZDxGdW5jPihmdW5jKShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwoJY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6OnRpbWVfcG9pbnQgZW5ke2Nocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKX07CglyZXR1cm4gY2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KGVuZC1iZWdpbikuY291bnQoKTsKfQoKY29uc3RleHByIGludCBpdGVyYXRpb257MTAwMDAwMDAwfTsKY29uc3QgdmVjdG9yPGludD4gdGVzdCgxMDAsMCk7CnNpemVfdCBkZTsKc2l6ZV90IHZlOwpzaXplX3QgdmUyOwoKdm9pZCB0ZXN0X2RlcXVlKCkKewoJZGVxdWU8dmVjdG9yPGludD4+IGRlcTsKCWZvcihpbnQgaXswfTtpIT1pdGVyYXRpb247KytpKQoJCWRlcS5lbXBsYWNlX2JhY2sodGVzdCk7CglkZT1kZXEuc2l6ZSgpOwp9Cgp2b2lkIHRlc3RfdmVjdG9yKCkKewoJdmVjdG9yPHZlY3RvcjxpbnQ+PiB2ZWM7Cglmb3IoaW50IGl7MH07aSE9aXRlcmF0aW9uOysraSkKCQl2ZWMuZW1wbGFjZV9iYWNrKHRlc3QpOwoJdmU9dmVjLnNpemUoKTsKfQoKdm9pZCB0ZXN0X3ZlY3RvcjIoKQp7Cgl2ZWN0b3I8dmVjdG9yPGludD4+IHZlYzsKCXZlYy5yZXNlcnZlKGl0ZXJhdGlvbik7Cglmb3IoaW50IGl7MH07aSE9aXRlcmF0aW9uOysraSkKCQl2ZWMuZW1wbGFjZV9iYWNrKHRlc3QpOwoJdmUyPXZlYy5zaXplKCk7Cn0KCmludCBtYWluKCkKewoJY291dDw8Y2FsY190aW1lKHRlc3RfZGVxdWUpPDxlbmRsOwoJY291dDw8Y2FsY190aW1lKHRlc3RfdmVjdG9yKTw8ZW5kbDsKCWNvdXQ8PGNhbGNfdGltZSh0ZXN0X3ZlY3RvcjIpPDxlbmRsOwp9