fork(1) download
  1. #include <iostream>
  2. #include <deque>
  3. #include <list>
  4. #include <iterator>
  5. #include <chrono>
  6. #include <iomanip>
  7. #include <string>
  8. #include <thread>
  9.  
  10. template <class C>
  11. int EraseMiddle(std::size_t size)
  12. {
  13. C container(size);
  14.  
  15. auto start = std::chrono::system_clock::now();
  16.  
  17. auto it = std::begin(container);
  18. std::advance( it, size/2 );
  19. container.erase( it );
  20.  
  21. return std::chrono::duration_cast<std::chrono::microseconds>( std::chrono::system_clock::now() - start ).count();
  22. }
  23.  
  24. template <class T>
  25. void MeasureForType()
  26. {
  27. std::cout << std::setw(10) << "size" << std::setw(10) << "list" << std::setw(10) << "deque\n";
  28. std::cout << std::string(30,'-') << std::endl;
  29.  
  30. for( std::size_t size = 1; size < 10000001; size *= 10 )
  31. {
  32. std::cout << std::setw(10) << size <<
  33. std::setw(10) << EraseMiddle<std::list<T>>(size) <<
  34. std::setw(10) << EraseMiddle<std::deque<T>>(size) << std::endl;
  35. }
  36. }
  37.  
  38. class C
  39. {
  40. public:
  41. C& operator=( const C& c )
  42. {
  43. std::this_thread::sleep_for( std::chrono::microseconds(1));
  44. }
  45.  
  46. C& operator= (const C&& c)
  47. {
  48. //мгновенно
  49. }
  50. };
  51.  
  52. int main() {
  53.  
  54. // MeasureForType<char>();
  55.  
  56. MeasureForType<C>();
  57.  
  58. return 0;
  59. }
Success #stdin #stdout 1.44s 159168KB
stdin
Standard input is empty
stdout
      size      list    deque
------------------------------
         1         1         0
        10         1         1
       100         1         0
      1000         1         1
     10000         8         0
    100000       160         2
   1000000      2771        17
  10000000     25882       162