Skriver C/C++ kode effektivt i konkurrencedygtig programmering

Først og fremmest skal du vide om Skabelon Makroer og Vektorer før du går videre til næste fase! 

  • Skabeloner er grundlaget for generisk programmering, der involverer at skrive kode på en måde, der er uafhængig af en bestemt type.
  • En makro er et fragment af kode, som har fået et navn. Når navnet bruges, erstattes det af indholdet af makroen.
  • Vektorer er de samme som dynamiske arrays med evnen til at ændre størrelsen på sig selv automatisk, når et element indsættes eller slettes, mens deres lager håndteres automatisk af containeren.


Så vi kan bruge disse kraftfulde værktøjer til at skrive vores kode på en effektiv måde.
Nogle af de fede tricks, der kan bruges i konkurrencepræget programmering, er givet som følger: 

    Brug af Range-baseret til loop : Dette er en meget cool funktion i C++11 og ville blive betragtet som den bedste, hvis du vil gentage fra start til slut. Denne kode viser, hvordan man bruger ranged for loops til at iterere gennem en matrix og en vektor: 
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  ;   }   

Produktion:

0 1 2 3 4 1 2 3 4 5 
    Initialiseringsliste: Denne type bruges til at få adgang til værdierne i en C++ initialiseringsliste. Her bliver objekterne af denne type automatisk konstrueret af compileren ud fra initialiseringslistedeklarationer, som er en liste over kommaseparerede elementer omsluttet af klammer. 
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  ;   }   

Produktion: 

One Two Three 
    Tildeling af maksimum- eller minimumværdi: Denne er nyttig for at undgå ekstra indsats ved at skrive max() eller min() funktion. 
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  ;   }   

Produktion:

Max value = 11 Min value = -9 
    Hurtig input/output i C/C++: I kompetitiv programmering skal du læse Input/Output så hurtigt som muligt for at spare værdifuld tid. 
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 

For at vide mere om hurtig input og output Læs denne artikel . 

    Brug af makroer som for loop : Måske ville det ikke være godt at bruge sådanne makroer, da det ville reducere kodens læsbarhed, men for at skrive hurtig kode kan du tage den risiko! 
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  ;   }   

Produktion  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Brug af 'bits/stdc++.h': I stedet for at tilføje tonsvis af #include-linjer skal du bare bruge #include Filerne inkluderer alle de header-filer, du har brug for i konkurrencedygtig programmering, hvilket sparer meget af din tid. Containere: Brug af forskellige beholdere som vektorlistekort osv. gør det muligt at bruge de foruddefinerede funktioner og reducerer størrelsen på koden betydeligt (oftest) Hurtig cin og cout: Hvis du bruger cin og cout til I/O, skal du blot tilføje følgende linje lige efter main(). 
std::ios_base::sync_with_stdio(false); 
    auto: Brug af auto til at erklære datatyper kan spare meget tid under programmeringskonkurrencer. Når en variabel er defineret som auto compiler, bestemmer dens type under kompileringstiden. Biblioteker og foruddefinerede funktioner: Brug af indbyggede funktioner såsom __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) osv. hvor end det kan anvendes. Prøv at lære forskellige funktioner tilgængelige i algoritme bibliotek af C++. De er nyttige de fleste gange i programmer


I sidste ende ved at bruge disse smarte tricks kan du nemt skrive kode på et minimum af tid og ord.

Opret Quiz