logo

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-10)   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