fork(1) download
  1. #include <cstdio>
  2. #include<iostream>
  3. #include <sstream>
  4. #include <chrono>
  5.  
  6. std::chrono::time_point<std::chrono::steady_clock> hClock()
  7. {
  8. return std::chrono::steady_clock::now();
  9. }
  10.  
  11. std::uint32_t TimeDuration(std::chrono::time_point<std::chrono::steady_clock> Time)
  12. {
  13. return std::chrono::duration_cast<std::chrono::nanoseconds>(hClock() - Time).count();
  14. }
  15.  
  16. void test()
  17. {
  18. char c = '0';
  19. char buffer[33];
  20. char* loc=buffer;
  21. char* end = buffer+32;
  22.  
  23. auto time = hClock();
  24. while(buffer!=end && (c = getchar_unlocked()) && (c != -1 && c != '\n' && c != '\r'))
  25. *loc++ = c;
  26. *loc = '\0';
  27. std::cout<<"getchar_unlocked took: "<<TimeDuration(time)<<" nano-seconds. ";
  28. std::cout<<"read: "<<buffer<<"\n";
  29. loc = buffer;
  30. *loc = '\0';
  31.  
  32. time = hClock();
  33. while(buffer!=end && (c = getchar()) && (c != -1 && c != '\n' && c != '\r'))
  34. *loc++ = c;
  35. *loc = '\0';
  36. std::cout<<"getchar took: "<<TimeDuration(time)<<" nano-seconds. ";
  37. std::cout<<"read: "<<buffer<<"\n";
  38. loc = buffer;
  39. *loc = '\0';
  40.  
  41. time = hClock();
  42. std::cin.getline(buffer, 32);
  43. std::cout<<"getline took: "<<TimeDuration(time)<<" nano-seconds. ";
  44. std::cout<<"read: "<<buffer<<"\n";
  45. loc = buffer;
  46. *loc = '\0';
  47.  
  48. time = hClock();
  49. int count = scanf("%[^\n]32s ", buffer);
  50. std::cout<<"scanf took: "<<TimeDuration(time)<<" nano-seconds. ";
  51. std::cout<<"read: "<<buffer<<"\n";
  52. loc = buffer;
  53. *loc = '\0';
  54.  
  55. loc = fgets(buffer, 32, stdin); //scanf seems to be leaving the newline in the buffer
  56. time = hClock();
  57. loc = fgets(buffer, 32, stdin);
  58. std::cout<<"gets took: "<<TimeDuration(time)<<" nano-seconds. ";
  59. std::cout<<"read: "<<buffer<<"\n\n";
  60. loc = buffer;
  61. *loc = '\0';
  62. }
  63.  
  64. int main()
  65. {
  66. test();
  67. test();
  68. test();
  69. return 0;
  70. }
Success #stdin #stdout 0s 3304KB
stdin
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
Hello There
stdout
getchar_unlocked took: 13927 nano-seconds. read: Hello There
getchar took: 2107 nano-seconds. read: Hello There
getline took: 48108 nano-seconds. read: Hello There
scanf took: 10602 nano-seconds. read: Hello There
gets took: 341 nano-seconds. read: Hello There


getchar_unlocked took: 266 nano-seconds. read: Hello There
getchar took: 408 nano-seconds. read: Hello There
getline took: 14419 nano-seconds. read: Hello There
scanf took: 6761 nano-seconds. read: Hello There
gets took: 275 nano-seconds. read: Hello There


getchar_unlocked took: 234 nano-seconds. read: Hello There
getchar took: 378 nano-seconds. read: Hello There
getline took: 12433 nano-seconds. read: Hello There
scanf took: 750 nano-seconds. read: Hello There
gets took: 282 nano-seconds. read: Hello There