fork download
  1. #include <cstdlib>
  2. #include <vector>
  3.  
  4. #include <iostream>
  5. #include <string>
  6.  
  7. #include <chrono>
  8.  
  9. class TestTimer
  10. {
  11. public:
  12. using clock = std::chrono::high_resolution_clock;
  13. using time_point = clock::time_point;
  14. using duration = clock::duration;
  15. TestTimer(const std::string & name) : name(name),
  16. start(clock::now())
  17. {
  18. }
  19.  
  20. ~TestTimer()
  21. {
  22. time_point now(clock::now());
  23. duration d = now - start;
  24.  
  25. std::cout << name << " completed in " << d.count() * (double)duration::period::num / duration::period::den <<
  26. " seconds" << std::endl;
  27. }
  28.  
  29. private:
  30. std::string name;
  31. time_point start;
  32. };
  33.  
  34. struct Pixel
  35. {
  36. Pixel()
  37. {
  38. }
  39.  
  40. Pixel(unsigned char r, unsigned char g, unsigned char b) : r(r), g(g), b(b)
  41. {
  42. }
  43.  
  44. unsigned char r, g, b;
  45. };
  46.  
  47. void UseVector()
  48. {
  49. TestTimer t("UseVector");
  50.  
  51. for(int i = 0; i < 1000; ++i)
  52. {
  53. int dimension = 999;
  54.  
  55. std::vector<Pixel> pixels;
  56. pixels.resize(dimension * dimension);
  57.  
  58. for(int i = 0; i < dimension * dimension; ++i)
  59. {
  60. pixels[i].r = 255;
  61. pixels[i].g = 0;
  62. pixels[i].b = 0;
  63. }
  64. }
  65. }
  66.  
  67. void UseVectorPushBack()
  68. {
  69. TestTimer t("UseVectorPushBack");
  70.  
  71. for(int i = 0; i < 1000; ++i)
  72. {
  73. int dimension = 999;
  74.  
  75. std::vector<Pixel> pixels;
  76. pixels.reserve(dimension * dimension);
  77.  
  78. for(int i = 0; i < dimension * dimension; ++i)
  79. pixels.push_back(Pixel(255, 0, 0));
  80. }
  81. }
  82.  
  83. void UseArray()
  84. {
  85. TestTimer t("UseArray");
  86.  
  87. for(int i = 0; i < 1000; ++i)
  88. {
  89. int dimension = 999;
  90.  
  91. Pixel * pixels = (Pixel *)malloc(sizeof(Pixel) * dimension * dimension);
  92.  
  93. for(int i = 0 ; i < dimension * dimension; ++i)
  94. {
  95. pixels[i].r = 255;
  96. pixels[i].g = 0;
  97. pixels[i].b = 0;
  98. }
  99.  
  100. free(pixels);
  101. }
  102. }
  103.  
  104. int main()
  105. {
  106. TestTimer t1("The whole thing");
  107.  
  108. UseArray();
  109. UseVector();
  110. UseVectorPushBack();
  111.  
  112. return 0;
  113. }
Success #stdin #stdout 3.87s 6544KB
stdin
Standard input is empty
stdout
UseArray completed in 1.39487 seconds
UseVector completed in 1.37653 seconds
UseVectorPushBack completed in 1.12173 seconds
The whole thing completed in 3.89339 seconds