Efektīva C/C++ koda rakstīšana konkurētspējīgā programmēšanā

Vispirms jums jāzina par Veidne Makro un Vektori pirms pāriet uz nākamo posmu! 

  • Veidnes ir vispārīgas programmēšanas pamats, kas ietver koda rakstīšanu tādā veidā, kas nav atkarīgs no konkrēta veida.
  • Makro ir koda fragments, kuram ir dots nosaukums. Ikreiz, kad tiek lietots nosaukums, tas tiek aizstāts ar makro saturu.
  • Vektori ir tādi paši kā dinamiskie masīvi ar iespēju automātiski mainīt izmērus, kad elements tiek ievietots vai dzēsts, un konteiners tos apstrādā automātiski.


Tātad mēs varam izmantot šos jaudīgos rīkus, lai efektīvi ierakstītu kodu.
Daži no lieliskajiem trikiem, ko var izmantot konkurētspējīgā programmēšanā, ir šādi: 

    Izmantojot diapazonu, pamatojoties uz cilpu : Šī ir ļoti lieliska funkcija programmā C++11, un tā tiks uzskatīta par labāko, ja vēlaties atkārtot no sākuma līdz beigām. Šis kods parāda, kā izmantot diapazonu cilpām, lai atkārtotu masīvu un vektoru: 
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  ;   }   

Izvade:

0 1 2 3 4 1 2 3 4 5 
    Inicializētāju saraksts: Šis veids tiek izmantots, lai piekļūtu vērtībām C++ inicializācijas sarakstā. Šeit šāda veida objektus kompilators automātiski konstruē no inicializācijas saraksta deklarācijām, kas ir ar komatu atdalītu elementu saraksts, kas ievietots iekavās. 
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  ;   }   

Izvade: 

One Two Three 
    Maksimālās vai minimālās vērtības piešķiršana: Tas ir noderīgi, lai izvairītos no papildu pūlēm, rakstot funkciju max () vai 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  ;   }   

Izvade:

Max value = 11 Min value = -9 
    Ātra ievade/izvade C/C++ formātā: Konkurētspējīgā programmēšanā ievade/izvade jāizlasa pēc iespējas ātrāk, lai ietaupītu dārgo laiku. 
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 

Lai uzzinātu vairāk par ātru ievadi un izvadi Izlasiet šo rakstu . 

    Makro izmantošana kā cilpai : Varbūt nebūtu labi izmantot šādus makro, jo tas samazinātu koda lasāmību, bet ātra koda rakstīšanai jūs varat uzņemties risku! 
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  ;   }   

Izvade  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Izmantojot “bits/stdc++.h”: Tā vietā, lai pievienotu daudz #include rindiņu, vienkārši izmantojiet #include Faili ietver visus galvenes failus, kas jums būs nepieciešami konkurētspējīgai programmēšanai, ietaupot daudz jūsu laika. Konteineri: Izmantojot dažādus konteinerus, piemēram, vektoru sarakstu karti utt., Jūs varat izmantot iepriekš definētas funkcijas un ievērojami (biežāk nekā nē) samazina koda lielumu. Ātra cin un cout: Ja ievadei/izvadīšanai izmantojat cin un cout, vienkārši pievienojiet šo rindiņu tieši aiz galvenā (). 
std::ios_base::sync_with_stdio(false); 
    auto: Izmantojot automātisko datu tipu deklarēšanu, programmēšanas konkursos var ietaupīt daudz laika. Ja mainīgais ir definēts kā automātisks kompilators, tas nosaka tā veidu kompilēšanas laikā. Bibliotēkas un iepriekš definētas funkcijas: Izmantojot iebūvētās funkcijas, piemēram, __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) utt., kur vien var lietot. Mēģiniet apgūt dažādas pieejamās funkcijas algoritms C++ bibliotēka. Tie ir noderīgi lielākoties programmās


Galu galā, izmantojot šos viedos trikus, jūs varat viegli uzrakstīt kodu minimālā laika un vārdu daudzumā.

Izveidojiet viktorīnu