C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の隠された機能


ここでは、さまざまな分野で役立つC++プログラミング言語の優れた機能とコツをいくつか紹介します。競技プログラミングイベントに参加したい場合のように、これらのトリックはコードを書く時間を短縮するのに役立ちます。これらの例を1つずつ見ていきましょう。

%演算子を使用せずに、数値が奇数か偶数かを確認します。このトリックは簡単です。数値と1を使用してビット単位のAND演算を実行できます。結果がゼロ以外の場合、これは奇数です。それ以外の場合、これは偶数です。ロジックが単純すぎます。すべての奇数はLSbで1になります。したがって、ANDを1で実行すると、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;

3番目の変数を使用せずに2つの数値を交換できます。これは、+および–演算子を使用して実行できます。ただし、ビット単位のXOR演算子を使用してそれを行うこともできます。番号を手動で確認して確認できます。

//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

main関数の配列の最大サイズは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プレフィックスと2進数を使用して、その番号が2進数で提供されていることを示すことができます。

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

  1. Windows 10の隠し機能:いや、いや?

    過去数週間Windows10を使用している場合は、プレビューバージョンの隅々まで探索しているときに、これらの隠された機能のいくつかを発見した可能性があります。 最終的な判断を下すには時期尚早ですが、スタートメニューが復活し、Windows7とWindows8の機能が統合されたことで、Microsoftが新しいOSを作成しない限り、将来的にはさらに多くの機能が表示されるようです。コンシューマーバージョンのスクラッチ。 初期のビルドをまだ試したことがない場合は、Windows 10の概要をご覧ください:エンタープライズユーザー向けのコア機能テクニカルプレビュー。また、アップグレードする場合に備

  2. macOS Mojave の 10 の隠れた機能

    まだベータ段階ですが、macOS Mojave がついに登場しました。 Apple は、ユーザーがバグや問題を見つけられるように、OS の早期リリースを行いました。また、そのリリースに伴い、デスクトップ スタック、ダーク モード、ギャラリー ビューなど、多くの興味深い macOS Mojave 機能についてすでに耳にしたことがあるでしょう。 さて、言及された macOS の機能について共有させてください。それらは単なる高レベルの機能です。それらの表面の下には、macOS Mojave エクスペリエンス全体に違いをもたらす、他にも多くの macOS Mojave の隠れた機能があります。 ma