いろいろなC++コーディングテクニック

なんか簡潔にかけて、すぐ使えそうな奴。
思いつくぶん抜粋。

文字列末尾削除

string s = "abc";
s.erase(--s.end());

char型からint型に変換して演算
文字コードを利用したもの。’0’は48番に当てられているため、’0’で引き算すると元の数字に戻る

char c = '5';
int num = c - '0';
cout << num - 1 << endl;  // 4になる

std::accumulateでlong longをつかう
std::accumulateの型は第三引数に依存することを利用したもの。

accumulate(v.begin(), v.end(), 0LL);  // サフィックスをつける

二重否定
if(flag) {} と同義ではない。条件式がbool値ではなく0か1を返すことを保証する。真偽値をそのまま流用するときなどに使える。

if (!!flag) {}  // 条件の返り値が0もしくは1であることが保証される

可変引数テンプレート
テンプレートパラメータ宣言とテンプレートパラメータとの間に省略記号…をつける。
ここで、Argsとargsはパラメータパックと呼ばれ、複数の引数が纏められている状態。これを…により展開することで使用する。

template <class... Args>
void f(Args... args);                // 0以上の任意の型の引数を取る