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
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP