競プロでよく使われるC++の略記まとめ
(初心者向けの記事です)
競プロでたまに見るC++のテクニカルな表記をメモ程度にまとめておきます。
自分自身はあまりこのような表記は使わないのですが、他の人のコード、特にライブラリ化している部分においてはよく使われている気がします。他の人のコードを読むのに役立てれば幸いです。
・if(n)
if(n != 0) と同義です。intからboolの変換では0以外が1(true)、0が0(false)に変換されます。
・if(!n)
if(n == 0) と同義です。上と同様。
・if(n & 1)
if(n % 2 != 0) または if(abs(n) % 2 == 1) と同義です。最下位のbitが立っているかどうかで偶奇の判定ができます。(nが負の場合の挙動を考慮していなかったので修正しました。)
・if(~n)
if(n != -1) と同義です。~nはnの補数を表します。
・while(q--)
while文をq回繰り返します。Codeforcesなどのクエリ式の問題でよく使われます。
・a=i++
a=i, i++; と同義です。iを加算し、aに加算前のiを代入します。
・(a *= b) %= m
a = a*b%m と同義です。
・a = !!b
a = (bool)b と同義です。bが0以外のときa=1, bが0のときa=0となります。
・b ^= 1 (bはbool型)
b = !b と同義で、bの真偽値を反転させます。略記というほどじゃないかも。
・if(a ^ b) (a, bはbool型)
aとbのいずれか一方のみがtrueのときif文を実行します。便利です。
・if (foo) return !printf("%d\n", x);
xを出力して0を返します。printfの返値は出力した文字数であるため、演算子「!」を作用させると0になります。
・if (foo) return puts("-1"), 0;
-1を出力して0を返します。コンマ演算子を用いると、コンマで区切られたすべての式を評価した後で一番右のものを返します。
他にもいろいろあると思いますが、とりあえず思い付いたものを書き連ねました。参考になればうれしいです。
また、自分が一目で理解できないものは、デバッグが困難になるのでなるべく書かないようにしましょう。
他にも追加したほうがいいよ!ってものがあれば教えてください。