Efektivní psaní kódu C/C++ v konkurenčním programování

V první řadě musíte vědět o Šablona Makra a vektory než přejdete do další fáze! 

  • Šablony jsou základem generického programování, které zahrnuje psaní kódu způsobem, který je nezávislý na jakémkoli konkrétním typu.
  • Makro je fragment kódu, který dostal jméno. Kdykoli je použit název, je nahrazen obsahem makra.
  • Vektory jsou stejné jako dynamická pole se schopností automaticky změnit velikost, když je prvek vložen nebo odstraněn, přičemž jejich úložiště je automaticky zpracováváno kontejnerem.


Můžeme tedy použít tyto výkonné nástroje pro psaní našeho kódu efektivním způsobem.
Některé ze skvělých triků, které lze použít v konkurenčním programování, jsou uvedeny následovně: 

    Použití cyklu for založeného na rozsahu : Toto je velmi skvělá funkce v C++11 a byla by považována za nejlepší, pokud chcete iterovat od začátku do konce. Tento kód ukazuje, jak používat smyčky ranged for k iteraci polem a vektorem: 
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  ;   }   

výstup:

0 1 2 3 4 1 2 3 4 5 
    Seznam inicializátorů: Tento typ se používá pro přístup k hodnotám v inicializačním seznamu C++. Zde jsou objekty tohoto typu automaticky konstruovány kompilátorem z deklarací inicializačního seznamu, což je seznam prvků oddělených čárkami uzavřených ve složených závorkách. 
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  ;   }   

výstup: 

One Two Three 
    Přiřazení maximální nebo minimální hodnoty: Toto je užitečné, abyste se vyhnuli nadměrnému úsilí při psaní funkce max() nebo min(). 
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  ;   }   

výstup:

Max value = 11 Min value = -9 
    Rychlý vstup/výstup v C/C++: V konkurenčním programování musíte číst vstup/výstup co nejrychleji, abyste ušetřili drahocenný čas. 
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 

Chcete-li vědět více o rychlém vstupu a výstupu Přečtěte si tento článek . 

    Použití maker jako smyčky for : Možná by nebylo dobré používat taková makra, protože by to snížilo čitelnost kódu, ale pro psaní rychlého kódu to risknout můžete! 
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  ;   }   

Výstup  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Pomocí 'bits/stdc++.h': Místo přidávání tuny #include řádků stačí použít #include Soubory obsahují všechny hlavičkové soubory, které budete potřebovat při konkurenčním programování, čímž ušetříte spoustu času. Kontejnery: Použití různých kontejnerů, jako je vektorová mapa seznamu atd., umožňuje používat předdefinované funkce a značně (častěji) snižuje velikost kódu. Rychlý cin a cout: Pokud pro I/O používáte cin a cout, přidejte následující řádek hned za main(). 
std::ios_base::sync_with_stdio(false); 
    auto: Použití auto k deklaraci datových typů může ušetřit spoustu času během programovacích soutěží. Když je proměnná definována jako automatický kompilátor, určuje její typ během kompilace. Knihovny a předdefinované funkce: Použití vestavěných funkcí, jako je __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) atd., kdekoli to lze použít. Zkuste se naučit různé funkce dostupné v algoritmus Knihovna C++. Jsou užitečné většinou v programech


Nakonec pomocí těchto chytrých triků můžete snadno napsat kód v minimálním množství času a slov.

Vytvořit kvíz