fork download
  1. #include <string>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <list>
  5. #include <chrono>
  6.  
  7. class muTimer
  8. {
  9. using Clock = std::chrono::high_resolution_clock;
  10. bool active = false;
  11. Clock::duration duration_;
  12. Clock::time_point start_ = Clock::now(), stop_ = Clock::now();
  13.  
  14. muTimer(const muTimer&) = delete;
  15. muTimer& operator=(const muTimer&) = delete;
  16. public:
  17. using ns = std::chrono::nanoseconds;
  18. using mks = std::chrono::microseconds;
  19. using ms = std::chrono::milliseconds;
  20. muTimer() { reset(); start(); }
  21. ~muTimer() = default;
  22. muTimer& reset()
  23. {
  24. duration_ = std::chrono::nanoseconds(0);
  25. active = false;
  26. return *this;
  27. }
  28. muTimer& start()
  29. {
  30. if (!active)
  31. {
  32. start_ = Clock::now();
  33. active = true;
  34. }
  35. return *this;
  36. }
  37. muTimer& stop()
  38. {
  39. if (active)
  40. {
  41. stop_ = Clock::now();
  42. duration_ += stop_ - start_;
  43. active = false;
  44. }
  45. return *this;
  46. }
  47. template<typename T = mks>
  48. unsigned long long duration()
  49. {
  50. return static_cast<unsigned long long>
  51. (std::chrono::duration_cast<T>(stop_-start_).count());
  52. }
  53. };
  54.  
  55.  
  56. using namespace std;
  57.  
  58. void kill(list<int>& l, size_t count)
  59. {
  60. list<int> tmp;
  61. auto it = l.begin();
  62. advance(it,count);
  63. tmp.splice(tmp.begin(),l,l.begin(),it);
  64. }
  65.  
  66.  
  67. int main([[maybe_unused]] int argc,
  68. [[maybe_unused]] const char * argv[])
  69. {
  70. list<int> L, M;
  71. for(int i = 0; i < 1000000; ++i) { L.push_back(i); M.push_back(i); }
  72.  
  73. {
  74. muTimer mt;
  75. kill(L,5000);
  76. mt.stop();
  77. cout << "Kill for " << mt.duration<>() << "mks\n";
  78. }
  79. {
  80. muTimer mt;
  81. auto it = M.begin();
  82. advance(it,5000);
  83. M.erase(M.begin(),it);
  84. mt.stop();
  85. cout << "Erase for " << mt.duration<>() << "mks\n";
  86. }
  87. cout << (L == M) << endl;
  88. }
  89.  
Success #stdin #stdout 0.14s 66020KB
stdin
Standard input is empty
stdout
Kill  for 162mks
Erase for 137mks
1