logo

Skriva C/C++-kod effektivt i konkurrenskraftig programmering

Först och främst behöver du veta om Mall Makron och Vektorer innan du går vidare till nästa fas! 

  • Ett makro är ett fragment av kod som har fått ett namn. Närhelst namnet används ersätts det av innehållet i makrot.
  • Vektorer är samma som dynamiska arrayer med möjligheten att ändra storlek automatiskt när ett element infogas eller tas bort och deras lagring hanteras automatiskt av behållaren.


Så vi kan använda dessa kraftfulla verktyg för att skriva vår kod på ett effektivt sätt.
Några av de coola knep som kan användas i konkurrenskraftig programmering ges enligt följande: 

    Använder intervallbaserat för loop: Detta är en väldigt cool funktion i C++11 och skulle anses vara bäst om du vill iterera från början till slut. Den här koden visar hur man använder ranged for loops för att iterera genom en array och en 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; } 

Produktion:



0 1 2 3 4 1 2 3 4 5
    Initialiseringslista:Denna typ används för att komma åt värdena i en C++-initieringslista. Här konstrueras objekten av denna typ automatiskt av kompilatorn från initialiseringslistdeklarationer som är en lista med kommaseparerade element inneslutna i klammerparenteser. 
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; } 

Produktion: 

One Two Three
    Tilldela högsta eller lägsta värde:Den här är användbar för att undvika extra ansträngning att skriva max() eller min() funktion. 
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; } 

Produktion:

Max value = 11 Min value = -9
    Snabb in-/utgång i C/C++:I konkurrenskraftig programmering måste du läsa Input/Output så snabbt som möjligt för att spara värdefull tid. 
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

För att veta mer om snabb input och output Läs den här artikeln . 

    Använda makron som för loop: Det kanske inte vore bra att använda sådana makron eftersom det skulle minska läsbarheten av kod men för att skriva snabb kod kan du ta den risken! 
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; } 

Produktion  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4
    Använder 'bits/stdc++.h':Istället för att lägga till massor av #include-rader, använd bara #include Filerna innehåller alla header-filer du behöver i konkurrenskraftig programmering och sparar mycket tid.Behållare:Att använda olika behållare som vektorlistkarta etc gör det möjligt för en att använda de fördefinierade funktionerna och minskar storleken på koden avsevärt (oftast)Snabb cin och cout:Om du använder cin och cout för I/O lägg bara till följande rad precis efter main(). 
std::ios_base::sync_with_stdio(false);
    bil:Att använda auto för att deklarera datatyper kan spara mycket tid under programmeringstävlingar. När en variabel definieras som automatisk kompilator bestämmer dess typ under kompileringstiden.Bibliotek och fördefinierade funktioner:Använd inbyggda funktioner som __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) etc varhelst det kan tillämpas. Försök att lära dig olika funktioner som finns tillgängliga i algoritm bibliotek av C++. De är användbara oftast i program


Genom att använda dessa smarta knep kan du enkelt skriva kod på ett minimum av tid och ord.

Skapa frågesport