プログラミングC

Tips

bit演算

  • there exists m in N n = 2^mの判定。
    • n & (n-1)
    • long long n;
  • count trailing zeros
    • unsigned int n;
  • __builtin_ctz(n) = k * 2^m, k and 2 are coprimeなるm
    • __builtin_ctz(n)
    • __builtin_ctz(n) = LSB(n)
  • count leading zeros
    • __builtin_clz(n)
    • unsigned int n;
    • sizeof(n) – __builtin_clz(n) = argmin x < 2^i
  • n bitの補数表現a<-->int b
    • a = (b+1<<(n-1))%(1<<(n-1));
    • a = (b+1<<(n-1))&( (1<<(n-1))-1);
    • b = (a-1<<(n-1))%(1<<(n-1));

STL

vector

strstream

  • ss.str()は終端文字std::endsを自動挿入しない
       int code = 1000;
       std::strstream ss;
       ss << code << std::ends;

C++11

文法

pure virtual

  • 純粋仮想にはvirtual = 0としなければならない。
  • それを引く仮想にも、virtualとしなければならない。

ゲッタ・セッタの生成プログラム

  • これに"int test"などを入力すると,ゲッタとセッタを出力してくれる
    awk '{printf("%s get%s(void){return %s;}\nvoid set%s(%s %s){%s = %s;}\n", $1, toupper(substr($2, 1, 1)) substr($2, 2), $2, toupper(substr($2, 1, 1)) substr($2, 2), $1, $2, $2 "_", $2);}'
  • 本当はvim scriptでやりたいのだが…

newと実体の動作の違い

  • 完全にコピーコンストラクタがおかしい以外考えられない。
    • new delete newで正常動作して、実体定義、実体代入で正常動作しない

親のコンストラクタを呼ぶ

decisionCross::decisionCross(StockDayStream* stock, int s, int m, int a)
    : decision(stock), _s(s), _m(m), _a(a)
{
}

sstreamとstrstream

  • str()が,sstreamはstd::string型を出力し,strstreamはchar*を出力する
  • strstreamはstd::endsを最後に入れる必要があるが,sstreamは入れてはならない.

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS