Efektyvus C/C++ kodo rašymas konkurencinio programavimo metu

Pirmiausia turite žinoti apie Šablonas Makrokomandos ir Vektoriai prieš pereinant į kitą etapą! 

  • Šablonai yra bendro programavimo pagrindas, apimantis kodo rašymą tokiu būdu, kuris nepriklauso nuo jokio konkretaus tipo.
  • Makrokomandas yra kodo fragmentas, kuriam suteiktas pavadinimas. Kai naudojamas pavadinimas, jis pakeičiamas makrokomandos turiniu.
  • Vektoriai yra tokie patys kaip dinaminiai masyvai, turintys galimybę automatiškai keisti dydį, kai elementas įterpiamas arba ištrintas, o jų saugojimą automatiškai tvarko konteineris.


Taigi galime naudoti šiuos galingus įrankius savo kodui rašyti efektyviai.
Kai kurios puikios gudrybės, kurios gali būti naudojamos konkurenciniam programavimui, pateikiamos taip: 

    Naudojant diapazoną, pagrįstą ciklu : Tai labai šauni C++11 funkcija ir būtų laikoma geriausia, jei norite kartoti nuo pradžios iki pabaigos. Šis kodas parodo, kaip naudoti ranged for ciklus, kad būtų galima kartoti masyvą ir vektorių: 
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  ;   }   

Išvestis:

0 1 2 3 4 1 2 3 4 5 
    Iniciatorių sąrašas: Šis tipas naudojamas norint pasiekti C++ inicijavimo sąrašo reikšmes. Čia tokio tipo objektus kompiliatorius automatiškai sukuria iš inicijavimo sąrašo deklaracijų, kurios yra kableliais atskirtų elementų, pateiktų skliaustuose, sąrašas. 
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  ;   }   

Išvestis: 

One Two Three 
    Didžiausios arba minimalios vertės priskyrimas: Tai naudinga norint išvengti papildomų pastangų rašant max() arba min() funkcijas. 
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  ;   }   

Išvestis:

Max value = 11 Min value = -9 
    Greitas įvestis / išvestis C / C++: Konkurencingo programavimo metu turite kuo greičiau perskaityti įvestį / išvestį, kad sutaupytumėte brangaus laiko. 
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 

Norėdami sužinoti daugiau apie greitą įvestį ir išvestį Perskaitykite šį straipsnį . 

    Makrokomandų naudojimas kaip ciklas : Galbūt nebūtų gerai naudoti tokias makrokomandas, nes tai sumažintų kodo skaitomumą, bet rašydami greitą kodą galite rizikuoti! 
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  ;   }   

Išvestis  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Naudojant „bits/stdc++.h“: Užuot pridėję daugybę #include eilučių, tiesiog naudokite #include Failuose yra visi antraštės failai, kurių jums prireiks konkurencingam programavimui, sutaupydami daug jūsų laiko. Konteineriai: Naudojant įvairius konteinerius, pvz., vektorinių sąrašų žemėlapį ir tt, galima naudoti iš anksto nustatytas funkcijas ir žymiai sumažinti kodo dydį (dažniau nei ne). Greitas cin ir cout: Jei I/O naudojate cin ir cout, tiesiog pridėkite šią eilutę iškart po main(). 
std::ios_base::sync_with_stdio(false); 
    auto: Naudojant automatinį duomenų tipų deklaravimą galima sutaupyti daug laiko programavimo konkurse. Kai kintamasis apibrėžiamas kaip automatinis kompiliatorius, jo tipą nustato kompiliavimo metu. Bibliotekos ir iš anksto nustatytos funkcijos: Naudojant integruotas funkcijas, pvz., __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) ir tt visur, kur galima pritaikyti. Pabandykite išmokti įvairių galimų funkcijų algoritmas C++ biblioteka. Jie dažniausiai naudingi programose


Galiausiai naudodamiesi šiais išmaniaisiais triukais galite lengvai parašyti kodą per minimalų laiko ir žodžių kiekį.

Sukurti viktoriną