Efficiënt schrijven van C/C++-code in competitief programmeren

Allereerst moet je er iets van weten Sjabloon Macro's En Vectoren voordat je doorgaat naar de volgende fase! 

  • Sjablonen vormen de basis van generiek programmeren, waarbij code wordt geschreven op een manier die onafhankelijk is van een bepaald type.
  • Een macro is een codefragment dat een naam heeft gekregen. Telkens wanneer de naam wordt gebruikt, wordt deze vervangen door de inhoud van de macro.
  • Vectoren zijn hetzelfde als dynamische arrays met de mogelijkheid om de grootte automatisch aan te passen wanneer een element wordt ingevoegd of verwijderd, waarbij de opslag automatisch door de container wordt afgehandeld.


We kunnen deze krachtige tools dus gebruiken om onze code op een effectieve manier te schrijven.
Enkele van de coole trucs die kunnen worden gebruikt bij competitief programmeren worden als volgt gegeven: 

    Bereik gebaseerd op lus gebruiken : Dit is een erg coole functie in C++11 en zou als de beste worden beschouwd als je van begin tot eind wilt herhalen. Deze code laat zien hoe je ranged for-lussen kunt gebruiken om door een array en een vector te itereren: 
CPP
   // C++ program to demonstrate range based for   // loops for accessing vector and array elements   #include       #include         using     namespace     std  ;   int     main  ()   {      // Create a vector object that      // contains 5 elements      vector   <  int  >     vec     =     {  0       1       2       3       4  };      // Type inference by reference using auto.      // Range based loops are preferred when no      // modification is needed in value      for     (  const     auto     &  value     :     vec  )      cout      < <     value      < <     ' '  ;      cout      < <     'n'  ;      // Basic 5 element integer array      int     array  []  =     {  1       2       3       4       5  };      for     (  const     auto     &  value  :     array  )      cout      < <     value      < <     ' '  ;      return     0  ;   }   

Uitgang:

0 1 2 3 4 1 2 3 4 5 
    Initialisatielijst: Dit type wordt gebruikt om toegang te krijgen tot de waarden in een C++-initialisatielijst. Hier worden de objecten van dit type automatisch door de compiler samengesteld op basis van initialisatielijstdeclaraties, wat een lijst is van door komma's gescheiden elementen tussen accolades. 
CPP
   #include       template   <  typename     T  >   void     printList  (  std  ::  initializer_list   <  T  >     text  )   {      for     (  const     auto     &     value  :     text  )      std  ::  cout      < <     value      < <     ' '  ;   }   // Driver program   int     main  ()   {      // Initialization list      printList  (     {  'One'       'Two'       'Three'  }     );      return     0  ;   }   

Uitgang: 

One Two Three 
    Maximale of minimale waarde toekennen: Deze is handig om extra inspanning bij het schrijven van de functie max() of min() te voorkomen. 
CPP
   #include       // Call by reference is used in x   template   <  typename     T       typename     U  >   static     inline     void     amin  (  T     &  x       U     y  )   {      if     (  y      <     x  )      x     =     y  ;   }   // call by reference is used in x   template   <  typename     T       typename     U  >   static     inline     void     amax  (  T     &  x       U     y  )   {      if     (  x      <     y  )      x     =     y  ;   }   // Driver program to find the Maximum and Minimum value   int     main  ()   {      int     max_val     =     0       min_val     =     1e5  ;      int     array  []  =     {  4       -5       6       -9       2       11  };      for     (  auto     const     &  val  :     array  )      // Same as max_val = max (max_val val)      // Same as min_val = min (min_valval)      amax  (  max_val       val  )     amin     (  min_val       val  );      std  ::  cout      < <     'Max value = '      < <     max_val      < <     '  n  '       < <     'Min value = '      < <     min_val  ;      return     0  ;   }   

Uitgang:

Max value = 11 Min value = -9 
    Snelle invoer/uitvoer in C/C++: Bij competitief programmeren moet u Input/Output zo snel mogelijk lezen om kostbare tijd te besparen. 
C
   #include          template   <  typename     T  >     void     scan  (  T     &  x  )   {      x     =     0  ;      bool     neg     =     0  ;      register     T     c     =     getchar  ();      if     (  c     ==     '-'  )      neg     =     1       c     =     getchar  ();      while     ((  c      <     48  )     ||     (  c     >     57  ))      c     =     getchar  ();      for     (     ;     c      <     48  ||  c     >     57     ;     c     =     getchar  ());      for     (     ;     c     >     47     &&     c      <     58  ;     c     =     getchar  ()     )      x  =     (  x      < <     3  )     +     (     x      < <     1     )     +     (     c     &     15     );      if     (  neg  )     x     *=     -1  ;   }   template   <  typename     T  >     void     print  (  T     n  )   {      bool     neg     =     0  ;      if     (  n      <     0  )      n     *=     -1       neg     =     1  ;      char     snum  [  65  ];      int     i     =     0  ;      do      {      snum  [  i  ++  ]     =     n     %     10     +     '0'  ;      n     /=     10  ;      }      while     (  n  );      --  i  ;      if     (  neg  )      putchar  (  '-'  );      while     (  i     >=     0  )      putchar  (  snum  [  i  --  ]);      putchar  (  'n'  );   }   // Driver Program   int     main  ()   {      int     value  ;      // Taking input      scan  (  value  );      // Printing output      print  (  value  );      return     0  ;   }   
Input: 756 Output: 756 

Voor meer informatie over snelle invoer en uitvoer Lees dit artikel . 

    Macro's gebruiken als lus : Misschien zou het niet goed zijn om dergelijke macro's te gebruiken, omdat dit de leesbaarheid van de code zou verminderen, maar voor het schrijven van snelle code kun je dat risico nemen! 
CPP
   #include          using     namespace     std  ;   #define rep(in) for (i = 0; i  < n; ++i)   #define REP(ikn) for (i = k; i  <= n; ++i)   #define REPR(ikn) for (i = k; i >= n; --i)   // Driver program to test above Macros   int     main  ()   {      int     i  ;      int     array  []     =     {  4       5       6       9       22       11  };      int     size  =     sizeof  (  array  )  /  sizeof  (  array  [  0  ]);          // Default 0 index based loop      rep  (  i       size  )         cout      < <     array  [  i  ]      < <     ' '  ;      cout   < <  '  n  '  ;          // Starting index based loop      REP  (  i       1       size  -1  )         cout      < <     array  [  i  ]      < <     ' '  ;      cout   < <  '  n  '  ;          // Reverse for loop      REPR  (  i       size  -1    0  )         cout      < <     array  [  i  ]      < <     ' '  ;      return     0  ;   }   

Uitvoer  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    'bits/stdc++.h' gebruiken: In plaats van heel veel #include-regels toe te voegen, gebruikt u gewoon #include De bestanden bevatten alle headerbestanden die u nodig heeft bij competitief programmeren, waardoor u veel tijd bespaart. Containers: Door verschillende containers te gebruiken, zoals een vectorlijstkaart enz., kunt u de vooraf gedefinieerde functies gebruiken en wordt de codegrootte aanzienlijk verkleind (vaker wel dan niet) Snel cin en cout: Als je cin en cout gebruikt voor I/O, voeg dan gewoon de volgende regel toe net na de main(). 
std::ios_base::sync_with_stdio(false); 
    auto: Het gebruik van auto om datatypes te declareren kan veel tijd besparen tijdens programmeerwedstrijden. Wanneer een variabele als autocompiler wordt gedefinieerd, wordt tijdens het compileren het type ervan bepaald. Bibliotheken en vooraf gedefinieerde functies: Gebruik ingebouwde functies zoals __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) etc waar dat kan worden toegepast. Probeer verschillende functies te leren die beschikbaar zijn in algoritme bibliotheek van C++. Ze zijn meestal nuttig in programma's


Uiteindelijk kun je door deze slimme trucs te gebruiken eenvoudig code schrijven in een minimum aan tijd en woorden.

Quiz maken

Dit Vind Je Misschien Leuk