fork download
  1. #include <chrono>
  2. #include <iostream>
  3. #include <random>
  4. #include <vector>
  5.  
  6.  
  7. class stopwatch
  8. {
  9. std::chrono::time_point<std::chrono::high_resolution_clock> last_;
  10. public:
  11. stopwatch()
  12. {
  13. reset();
  14. }
  15. void reset()
  16. {
  17. last_ = std::chrono::high_resolution_clock::now();
  18. }
  19. std::chrono::microseconds elapsed() const
  20. {
  21. auto t = std::chrono::high_resolution_clock::now();
  22. return std::chrono::duration_cast<std::chrono::microseconds>(t - last_);
  23. }
  24. std::chrono::microseconds tick()
  25. {
  26. auto t = std::chrono::high_resolution_clock::now();
  27. auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(t - last_);
  28. last_ = t;
  29. return elapsed;
  30. }
  31. };
  32.  
  33. template <std::size_t N, typename Iterator>
  34. void foo(Iterator begin, Iterator end)
  35. {
  36. for (; begin != end; ++begin)
  37. {
  38. *begin *= N;
  39. *begin *= N;
  40. *begin *= N;
  41. *begin *= N;
  42. *begin *= N;
  43. }
  44. }
  45.  
  46. int main()
  47. {
  48. std::vector<unsigned> v;
  49. std::default_random_engine e;
  50.  
  51. for (unsigned i = 5000000; i-- != 0; )
  52. v.push_back(e());
  53.  
  54. stopwatch w;
  55. foo<77>(v.begin(), v.end());
  56. std::cout << "Time: " << w.elapsed().count() / 1000000.0 << '\n';
  57. std::cout << v[e() % v.size()] << '\n';
  58.  
  59. w.reset();
  60. foo<31>(v.begin(), v.end());
  61. std::cout << "Time: " << w.elapsed().count() / 1000000.0 << '\n';
  62. std::cout << v[e() % v.size()] << '\n';
  63. }
Success #stdin #stdout 0.12s 2960KB
stdin
Standard input is empty
stdout
Time: 0.010809
4273669408
Time: 0.010802
4123921301