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() 函式向某些容器(如 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-07-30

422 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告