Advertisement
RobertDeMilo

RB4.5 Преимущества списка

Apr 18th, 2024
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. Список эффективен, если необходимо удалять из середины (или вставлять в середину)
  2. быстро и не инвалидируя итераторы
  3.  
  4. Итераторы списка имеют категорию bidirectional (двунаправленные)
  5.  
  6. На практике списки нужны редко
  7.  
  8. Еще реже нужен контейнер forward_list - список, позволяющий итерироваться только вперед
  9.  
  10. #include <iostream>
  11. #include <algorithm>
  12. #include <list>
  13. #include <vector>
  14.  
  15. using namespace std;
  16.  
  17.  class NumbersOnVector
  18.  {
  19.      public:
  20.      void Add(int x)
  21.      {
  22.          data.push_back(x);
  23.      }
  24.      
  25.      template<typename Predicate>
  26.      void Remove(Predicate predicate)
  27.      {
  28.          data.erase(
  29.              remove_if(begin(data),end(data),predicate),
  30.          data.end());
  31.      }
  32.      
  33.      private:
  34.      vector<int> data;
  35.      
  36.  };
  37.  
  38.  class NumbersOnList
  39.  {
  40.      public:
  41.      void Add(int x)
  42.      {
  43.          data.push_back(x);
  44.      }
  45.      
  46.      template<typename Predicate>
  47.      void Remove(Predicate predicate)
  48.      {
  49.          data.remove_if(predicate);
  50.      }
  51.      
  52.      private:
  53.      list<int> data;
  54.      
  55.  };
  56.  
  57.  const int SIZE = 1000000;
  58.  const int REMOVAL_COUNT = 10;
  59.  
  60. int main()
  61. {
  62.     {
  63.         //LOG_DURATION("vector");
  64.         NumbersOnVector numbers;
  65.        
  66.         for (int i = 0; i < SIZE; ++i)
  67.         {
  68.            numbers.Add(i);
  69.         }
  70.        
  71.         for(int i=0;i<REMOVAL_COUNT;++i)
  72.         {
  73.             numbers.Remove([i](int x){return x%REMOVAL_COUNT==i;});
  74.         }
  75.        
  76.     }
  77.    
  78.       {
  79.         //LOG_DURATION("list");
  80.         NumbersOnList numbers;
  81.        
  82.         for (int i = 0; i < SIZE; ++i)
  83.         {
  84.            numbers.Add(i);
  85.         }
  86.           for(int i=0;i<REMOVAL_COUNT;++i)
  87.         {
  88.             numbers.Remove([i](int x){return x%REMOVAL_COUNT==i;});
  89.         }
  90.        
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement