logo

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