Version 1 (1572.38ms):
#include <iostream>
#include <vector>
#include <chrono>
int main(int argc, char* argv[])
{
std::chrono::time_point<std::chrono::steady_clock> startTime = std::chrono::steady_clock::now();
int n = 1000000;
int m = 1000;
for (int k = 0; k < m; k++)
{
std::vector<int> array(0);
array.reserve(n);
for (int i = 0; i < n - 10; i++)
{
array.push_back(i);
}
}
auto time = std::chrono::steady_clock::now() - startTime;
std::cout << "Elapsed time: "
<< std::chrono::duration<double, std::milli>(time).count()
<< " ms\n";
return 0;
}
Version 2 (3736.49ms):
#include <iostream>
#include <vector>
#include <chrono>
int main(int argc, char* argv[])
{
std::chrono::time_point<std::chrono::steady_clock> startTime = std::chrono::steady_clock::now();
int n = 1000000;
int m = 1000;
for (int k = 0; k < m; k++)
{
std::vector<int> array;
array.reserve(n);
for (int i = 0; i < n - 10; i++)
{
array.push_back(i);
}
}
auto time = std::chrono::steady_clock::now() - startTime;
std::cout << "Elapsed time: "
<< std::chrono::duration<double, std::milli>(time).count()
<< " ms\n";
return 0;
}
Can someone please explain to me why such a great difference in the running time? The only difference is in the vector construction. Both are created with size = capacity = 0.
Compiler: g++ 5.4.0 Compiler flags: -Wall -std=c++14 -O2