C++ 競賽程式設計技巧(適用於 C++ 11)?


這裡我們將學習一些C++程式語言的實用技巧,這些技巧可以幫助我們在不同的領域提高效率。例如,如果我們想參加一些程式設計競賽,這些技巧將有助於我們縮短編寫程式碼的時間。讓我們逐一看看這些例子。

  • 不用%運算子檢查數字是奇數還是偶數。這個技巧很簡單。我們可以對數字和1執行按位與運算。如果結果非零,則為奇數,否則為偶數。邏輯很簡單。所有奇數的最低有效位都是1。因此,與1進行AND運算後,它將遮蔽除最低有效位之外的所有位,因此我們可以輕鬆獲得所需的結果。

if ((n & 1) != 0) {
   //this is odd
} else {
   //This is even
}
  • 使用移位運算子進行快速乘法和除法。如果我們想將一個數字乘以2n,我們可以簡單地將該數字左移n位。類似地,如果我們想將一個數字除以2n,則將該數字右移n位。

x = 40;
y = x << 2; //x will be multiplied with 4, so y = 160
cout << x;
x = 40;
y = x >> 2; //x will be divided by 4, so y = 10
cout << x;
  • 我們可以不用第三個變數交換兩個數字。這可以使用+和-運算子來完成。但是我們也可以使用按位異或運算子來完成。您可以手動檢查數字以確保。

//swap x and y
x ^= y;
y ^= x;
x ^= y;
  • 有時有一些約束條件,我們不能在程式碼中使用strlen()函式。在這種情況下,我們建立自己的strlen()函式。如果只是訪問字元,那麼我們真的不需要這樣做。我們可以檢查位置i處的字元是否有效(非零)。如果非零,我們可以遍歷,否則停止。

for(int i = 0; s[i]; i++){
   cout << s[i];
}
  • 在STL中,我們最常使用push_back()函式向一些容器(如vector等)新增新元素。不用它,我們也可以使用emplace_back()。此函式速度更快。它不會在其他地方分配記憶體,而是在容器中追加已分配的記憶體。

  • C++提供內建的GCD函式。我們可以在不同的情況下使用它們。語法如下所示。

__gcd(x, y) //find GCD of x and y
  • 主函式中陣列的最大大小約為10^6。但是如果陣列在全域性宣告,我們可以宣告大小到10^7。

  • 我們可以使用對數運算計算任何數字的最高有效位。請參閱以下邏輯以瞭解其思想。

n = 4578;
double k = log10(n);
k = k – floor(k);
int x = pow(10, k); //x is the most significant digit
  • 使用對數運算直接計算位數。我們不為此使用任何迴圈。

n = 4578;
int digit_count = floot(log10(n)) + 1
  • 我們可以使用此邏輯直接檢查數字是否是2的冪。

x = 1024;
bool check = x && (!(x & (x-1))); //if this is true, then power of two.
  • C++中有一些內建演算法可以檢查以下條件。

all_of(left, left + n, isPositive()); //check all are positive or not
any_of(left, left + n, isPositive()); //check at least one positive or not.
none_of(left, left + n, isPositive()); //check no elements are positive
  • 複製函式用於將元素從一個容器複製到另一個容器。

int src[5] = {10, 20, 30, 40, 50};
int des[5];
copy_n(src, 5, dest);
  • 有一個名為itoa()的演算法。該演算法可用於建立一系列按順序遞增的值,就像為*first賦值初始值,然後使用後增量運算子使用該值一樣。

int arr[5] = {0};
char str[5] = {0};
itoa(arr, arr+5, 15); //it will generate {15, 16, 17, 18, 19}
itoa(str, str+5, ‘A’); //it will generate {‘A’, ‘B’, ‘C’, ‘D’, ‘E’}
  • 以二進位制形式賦值。我們可以使用0b字首和一些二進位制數來表示該數字是以二進位制形式提供的。

int x = 0b1101; //then x will hold 13
  • 在C++中,我們可以使用關鍵字而不使用條件運算子。例如,關鍵字'and'可以代替'&'。

x = 10;
if(x < 10 and x > 5)
   cout << “True” << endl;
else
   cout << “False” << endl;
//This will return True

更新於:2019年7月30日

247 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.