fork download
  1. #include <algorithm>
  2. #include <chrono>
  3. #include <iostream>
  4. #include <iterator>
  5. #include <vector>
  6.  
  7. using clock_type = std::chrono::high_resolution_clock;
  8.  
  9. std::size_t test_cases = 100;
  10. std::vector<int> big_vector;
  11.  
  12.  
  13. void prepare_big_vector() {
  14. for(int i = 0; i < 1 * 1000 * 1000; ++i)
  15. big_vector.push_back(i % 1299653);
  16. }
  17.  
  18.  
  19. // Tests
  20.  
  21. clock_type::duration test_resize() {
  22. clock_type::time_point start = clock_type::now();
  23.  
  24. {
  25. for(std::size_t i = 0; i < test_cases; ++i) {
  26. std::vector<int> copied_vector;
  27.  
  28. copied_vector.resize(big_vector.size());
  29. std::copy(std::begin(big_vector), std::end(big_vector), std::begin(copied_vector));
  30. }
  31. }
  32.  
  33. clock_type::time_point end = clock_type::now();
  34. return end - start;
  35. }
  36.  
  37. clock_type::duration test_reserve() {
  38. clock_type::time_point start = clock_type::now();
  39.  
  40. {
  41. for(std::size_t i = 0; i < test_cases; ++i) {
  42. std::vector<int> copied_vector;
  43.  
  44. copied_vector.reserve(big_vector.size());
  45. std::copy(std::begin(big_vector), std::end(big_vector), std::begin(copied_vector));
  46. }
  47. }
  48.  
  49. clock_type::time_point end = clock_type::now();
  50. return end - start;
  51. }
  52.  
  53. clock_type::duration test_reserve2() {
  54. clock_type::time_point start = clock_type::now();
  55.  
  56. {
  57. for(std::size_t i = 0; i < test_cases; ++i) {
  58. std::vector<int> copied_vector;
  59.  
  60. copied_vector.reserve(big_vector.size());
  61. std::copy(std::begin(big_vector), std::end(big_vector), std::back_inserter(copied_vector));
  62. }
  63. }
  64.  
  65. clock_type::time_point end = clock_type::now();
  66. return end - start;
  67. }
  68.  
  69.  
  70. // Main
  71.  
  72. int main() {
  73. prepare_big_vector();
  74.  
  75. clock_type::duration resize_duration = test_resize();
  76. clock_type::duration reserve_duration = test_reserve();
  77. clock_type::duration reserve2_duration = test_reserve2();
  78.  
  79. double resize_ms = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(resize_duration).count();
  80. double reserve_ms = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(reserve_duration).count();
  81. double reserve_ms2 = std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(reserve2_duration).count();
  82.  
  83. std::cout << "Resize [ms]: " << resize_ms << std::endl;
  84. std::cout << "Reserve [ms]: " << reserve_ms << std::endl;
  85. std::cout << "Reserve (back_inserter) [ms]: " << reserve_ms2 << std::endl;
  86.  
  87. system("pause");
  88.  
  89. return 0;
  90. }
  91.  
Success #stdin #stdout #stderr 1.78s 3460KB
stdin
Standard input is empty
stdout
Resize [ms]: 571.282
Reserve [ms]: 509.561
Reserve (back_inserter) [ms]: 690.148
stderr
sh: 1: pause: not found