プログラミングC
Tips †
- include blockの代わりに、#pragma onceを先頭に入れるだけで良い。
- コーディングパターン
bit演算 †
- there exists m in N n = 2^mの判定。
- count trailing zeros
- __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 †
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は入れてはならない.
coutに表示させる †
#include <iostream>
class HoldingStock {
public:
int m_code;
std::ostream& operator()(std::ostream& ros) {
ros << m_code << " " << m_code << " " << m_sl << " " << m_tp;
return ros;
}
};
isnanがあいまい †
fstreamのパターン †
#include <iostream>
#include <fstream>
using namespace;
int main()
{
ifstream fin(filename);
if (!fin) {
return 1;
}
while (fin) {
fin >> t;
fin >> x >> y >> z;
cout << x << " " << y << " " << z << endl;
}
return 0;
}
ofstream ofs("data.txt");
if(ofs) {
ofs << "OK" << endl; // cout に書き出すのと同じ感じで
}