Efektívne písanie kódu C/C++ v konkurenčnom programovaní

V prvom rade musíte vedieť o Šablóna Makrá a vektory pred prechodom na ďalšiu fázu! 

  • Šablóny sú základom všeobecného programovania, ktoré zahŕňa písanie kódu spôsobom, ktorý je nezávislý od akéhokoľvek konkrétneho typu.
  • Makro je fragment kódu, ktorý dostal meno. Kedykoľvek sa použije názov, nahradí sa obsahom makra.
  • Vektory sú rovnaké ako dynamické polia s možnosťou automatickej zmeny veľkosti, keď je prvok vložený alebo odstránený, pričom ich ukladanie automaticky spracováva kontajner.


Takže tieto výkonné nástroje môžeme použiť na písanie nášho kódu efektívnym spôsobom.
Niektoré zo skvelých trikov, ktoré možno použiť v konkurenčnom programovaní, sú uvedené takto: 

    Použitie rozsahu založeného na slučke for : Toto je veľmi skvelá funkcia v C++11 a považovala by sa za najlepšiu, ak chcete opakovať od začiatku do konca. Tento kód ukazuje, ako používať cykly ranged for na iteráciu cez pole a 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  ;   }   

výstup:

0 1 2 3 4 1 2 3 4 5 
    Zoznam inicializátorov: Tento typ sa používa na prístup k hodnotám v inicializačnom zozname C++. Tu sú objekty tohto typu automaticky zostavené kompilátorom z deklarácií inicializačného zoznamu, čo je zoznam prvkov oddelených čiarkami uzavretých v zátvorká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 
    Priradenie maximálnej alebo minimálnej hodnoty: Toto je užitočné, aby ste sa vyhli ďalšiemu úsiliu pri písaní funkcie max() alebo 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 
    Rýchly vstup/výstup v C/C++: V konkurenčnom programovaní musíte čítať vstup/výstup čo najrýchlejšie, aby ste ušetrili 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 

Ak chcete vedieť viac o rýchlom vstupe a výstupe Prečítajte si tento článok . 

    Používanie makier ako slučky for : Možno by nebolo dobré používať takéto makrá, pretože by to znížilo čitateľnosť kódu, ale pri písaní rýchleho kódu to riskovať 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 
    Pomocou 'bits/stdc++.h': Namiesto pridávania ton #include riadkov jednoducho použite #include Súbory obsahujú všetky hlavičkové súbory, ktoré budete potrebovať pri konkurenčnom programovaní, čím ušetríte veľa času. Nádoby: Použitie rôznych kontajnerov, ako je vektorová mapa zoznamu atď., umožňuje používať preddefinované funkcie a značne zmenšuje veľkosť kódu (častejšie ako ne) Rýchly cin a cout: Ak používate cin a cout pre I/O, pridajte nasledujúci riadok hneď za main(). 
std::ios_base::sync_with_stdio(false); 
    auto: Použitie automatického na deklarovanie dátových typov môže ušetriť veľa času počas programovacích súťaží. Keď je premenná definovaná ako automatický kompilátor, určuje jej typ počas kompilácie. Knižnice a preddefinované funkcie: Používanie vstavaných funkcií, ako je __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) atď., kdekoľvek to možno použiť. Skúste sa naučiť rôzne funkcie dostupné v algoritmu V programoch sú väčšinou užitočné


V konečnom dôsledku pomocou týchto inteligentných trikov môžete jednoducho napísať kód v minimálnom množstve času a slov.

Vytvoriť kvíz