2007-06-01から1ヶ月間の記事一覧
1章1.4節 テンプレートが希望の光を投げる(後半) というわけで、テンプレートを使った際の問題点ですが、 構造を特殊化することはできません。 メンバ関数の特殊化はスケーラビリティがありません。 ライブラリの開発者は複数のデフォルト値を提供できま…
テンプレートが希望の光を投げる んでは、テンプレートを使ったらどうか? テンプレートは、ユーザが提供した型に基づいて、コンパイル時点でコードを生成するため、 組み合わせによる様々な動作に対応するための良い素材となります。うんうん。たしかに、テ…
1章 1.3 多重継承で解決できるのか? 多重継承によって、選択の組み合わせの爆発的な増加に対応するという手が考えられます。 例えば、Temporaryクラスと、Secretaryクラスを継承してTemporarySecretaryを作ったり、BaseSmartPtrと、RefCountedと、MultiThre…
1章 1.2 何でもやっちゃえインターフェースの失敗(後半) 異なった設計ごとに小さなクラスを用意してみたら?の失敗 例えば、スマートポインタの場合、SingleThreadSmartPtr、MultiThreadedSmartPtr、RefCountedSmartPtr、RefLinkedSmartPtrといって一連の…
「Modern C++ Design」を、わからないなりにとりあえずガーッと読んだ。 けど、ほんと分からん。 とりあえず、ポリシークラスの考えが、わかったようで分かってないので、1つ1つ確認してみることに。 1章 1.2 何でもやっちゃえインターフェースの失敗 クラ…
最後に、走査アルゴリズムというのを実装してみました。 例によって詳細は「珠玉のプログラミング」に載っているのですが、簡単に説明すると、x[0...n]までの部分配列の最大和は、x[0...n-1]の部分配列の最大和か、x[n]から左方向に伸びた配列の和のいずれか…
昨日のアルゴリズムからループ一つ減らしたもの。 #include <iostream> #include <boost/random.hpp> #include "autoStopWatch.h" using namespace std; using namespace boost; const int ARRAY_LENGTH = 10000; float x[ARRAY_LENGTH]; //部分和を総当たりで調べて、和の最大を求める関</boost/random.hpp></iostream>…
珠玉のプログラミングで取り上げられていた問題を、実際に解いてみる。問題: 1次元のパターン認識の問題。n要素の浮動小数点の配列xを入力とし、配列xの連続した要素(部分配列)でその和が最大になるものを見つけて、その和を出力する。たとえば、 2,-3…
これだとaのみポインタになってしまう。この歳になっても、意外と、やってしまう。a,b,c全てをポインタとして扱いたい場合は、Hoge *a, *b, *c;
二分探索は意外と難しいと『珠玉のプログラミング』に書いていたので、実際書いてみました。 #include <iostream> using namespace std; int sorted_array[10] = { //テスト用に適当なソート済みデータをでっちあげ -1,0,1,2,3,4,5,6,7,8 }; struct BinarySearchError{</iostream>…
-O0オプションでOK。
たぶんAPNICという非営利団体。
IPv4が32bitだから、IPv6は48bitと思われがち(僕だけ?)だけど、実はIPv6は128bitです。 単純計算だと、3.4 × 100000000000000000000000000000000000000 個のアドレスが割り当て可能です。ちなみに、128bitだと表記するのも大変なので16bitごとに16進数で …
IPv4の枯渇問題について調べてみた。どうやら、ネットを徘徊して調べた結果、枯渇すると行っているものの、実は全世界のホスト数は現在4億程度らしい。 IPv4は32ビットだから、429496729。つまりだいたい全世界で42億ホストまではIPv4で運用できる。実は、ま…
キーボードは、いろいろな変遷を経て、今はHappyHackingLite2JPを使ってます。 ただ、全角/半角の位置と、windowsキーがFnキーを押しながらでないと押せないのが気にくわないのでレジストリ値をいじってキーは位置を変えることに。んで、こんな↓ |
いまさら感満載ですが、gccでは、-Iオプションでヘッダーパスを指定できます。例えば、cygwinで、boostをincludeしたいときだったら、 g++ -I C:/cygwin/usr/include/boost-1_33 main.cppとか。 また、C:/cygwinは省略しても良いらしく g++ -I/usr/include/b…
試しに、 #include <boost/lambda/bind.hpp> としても、no fileとか言われてうまくいかん。cygwin/user/includeフォルダをみてみると、boostは、 cygwin/user/include/boost-1_33/boost/... に入っている模様。 #include <boost-1_33/boost/lambda/bind.hpp> としてみたら、こんどはbind.hppの中での他のhppをincludeし</boost-1_33/boost/lambda/bind.hpp></boost/lambda/bind.hpp>…
ごり押し。長文。ださいorz #include <iostream> #include <vector> using namespace std; const int n = 11; const int m = 10; vector<int> container; int rand_n(int n){ return rand() % n; } //重複true ノット重複false bool repetition_check(int i){ vector<int>::iterator it =</int></int></vector></iostream>…
あまり知られていませんが、関数内でもクラスを宣言することができます。例えば、こんな感じで↓ void func(){ class Hoge{ }; } このクラスは、絶対に継承できません。なんで、これを使うと、c++でも、finalなクラスを作ることができそうです。例えば、こん…
template<bool> struct StaticErrorChecker; template<> struct StaticErrorChecker<true>{}; #define STATIC_ASSERT(expr) (StaticErrorChecker<(expr) != 0>()) int main(){ const bool true_flag = true; const bool false_flag = false; STATIC_ASSERT(true_flag); /</true></bool>…
htpasswd -c パスワードファイル名 ログイン名でパスワードファイルを作成する。httpd.confのなかに <Directory アクセス制御したいとこのディレクトリ名(フルパス)> AuthType Basic AuthName "パスワード要求時に表示されるみたい。適当に" AuthUserFile さっき設定したパスワードファイルへのパス Require valid-user </Directory>を…
ちょっとしたコードテスト用に作ってみた。 struct AutoStopWatch{ AutoStopWatch(){ mStartTime = clock(); } ~AutoStopWatch(){ std::cout << "time : " << (static_cast<double>(clock() - mStartTime) / CLOCKS_PER_SEC) << std::endl; } clock_t mStartTime; };</double>
class Hoge{ void piyo(); }; だとすると、 void (Hoge::*p)() = &Hoge::piyo; というようにする
sizeコマンドを使うと、分かります。 size a.exeでOK。text,data,bss各セグメントのサイズが表示されます。 ちなみに、それぞれtext ->プログラムの本体(命令コード) data ->初期化済みデータの格納領域 bss ->未初期化データの格納領域だったはず…。
iterate中に、removeとかinsertとかできるiteratorをrobust iteratorと言うらしい。 たぶん。
例えば、以下のようなコードが書ける。 #include <iostream> using namespace std; struct Base{ virtual void func() = 0; }; struct A : public Base{ virtual void func(){}; }; struct B : public Base{ virtual void func(){}; }; struct C : public Base{ virtua</iostream>…
多重継承の際 a a | | b c \ / dこーせず、 a / \ b c \ / dこーしたいときに、 class b : public virtual a { }; class c : public virtual a { }; とすると、実現できます。 これを仮想継承といいます。
参考↓ http://d.hatena.ne.jp/naoya/20051012/1129115986相互に参照している部分をweak_ptrを使えば、余分なcountがされないので、大丈夫。 けど、できれば、こういう設計自体をしないほうが良い。たぶん。
virtualにしてると仮想関数テーブルを経由する分、関数へのアクセスは遅くなる。シビアに速度UPが要求されるような場面で、かつ頻繁に破壊と構築が行われるような場合は、できるだけデストラクタをvirtualにしない方が良いと思われ。あと、vptrの分メモリ食…