fork download
  1. #include <iostream>
  2. #include <chrono>
  3. #include <vector>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. class TimeMeasurer
  8. {
  9. public:
  10. TimeMeasurer() { start = std::chrono::high_resolution_clock::now(); }
  11. ~TimeMeasurer()
  12. {
  13. using namespace std::chrono;
  14. auto stop = high_resolution_clock::now();
  15. auto duration = duration_cast<microseconds>(stop - start);
  16. std::cout << "tm " << duration.count() << std::endl;
  17. };
  18.  
  19. TimeMeasurer(const TimeMeasurer&) = delete;
  20. TimeMeasurer operator=(const TimeMeasurer&) = delete;
  21. TimeMeasurer(TimeMeasurer&&) = delete;
  22. TimeMeasurer operator=(TimeMeasurer&&) = delete;
  23.  
  24. private:
  25. std::chrono::high_resolution_clock::time_point start;
  26. };
  27.  
  28. std::vector<bool> bvec;
  29. std::vector<char> cvec;
  30.  
  31. int main() {
  32. const size_t count = 1000000;
  33.  
  34. bvec.reserve(count);
  35. cvec.reserve(count);
  36.  
  37. for (size_t i = 0; i < count; ++i)
  38. {
  39. bool value = rand() % 2 == 0;
  40. bvec.push_back(value);
  41. cvec.push_back(static_cast<char>(value));
  42. }
  43.  
  44. int sum1 = 0;
  45. {
  46. TimeMeasurer tm;
  47. for (size_t i = 0; i < count; ++i)
  48. {
  49. sum1 += (bvec[i]) ? 1 : 0;
  50. }
  51. }
  52. std::cout << sum1 << "\n";
  53.  
  54. int sum2 = 0;
  55. {
  56. TimeMeasurer tm;
  57. for (size_t i = 0; i < count; ++i)
  58. {
  59. sum2 += (cvec[i] != 0) ? 1 : 0;
  60. }
  61. }
  62. std::cout << sum2 << "\n";
  63.  
  64. return 0;
  65. }
Success #stdin #stdout 0.02s 4480KB
stdin
Standard input is empty
stdout
tm 1774
500155
tm 580
500155