logo

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