C++ 初學者在競賽程式設計中的一些實用技巧


在這裡,我們將瞭解 C++ 程式語言的一些實用技巧,這些技巧可以幫助我們在不同的領域。例如,如果我們想參加一些競賽程式設計活動,那麼這些技巧將有助於我們減少編寫程式碼的時間。讓我們逐一瞭解其中的一些示例。

  • 檢查一個數字是奇數還是偶數,不使用 % 運算子。這個技巧很簡單。我們可以對數字和 1 執行按位與運算。如果結果非零,則為奇數,否則為偶數。邏輯非常簡單。所有奇數在最低有效位 (LSb) 上都有 1。因此,在與 1 執行 AND 運算後,它將遮蔽除 LSb 之外的所有字元,因此我們可以輕鬆獲得所需的結果。
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() 函式向某些容器(如向量等)中新增新元素。不使用它,我們也可以使用 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 年 12 月 18 日

310 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.