2007-01-01から1年間の記事一覧

cygwinでboost使おうと試みた

試しに、 #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>…

問:0..n-1からm個の整数をランダムに選び出し、ランダムに出力するプログラムを作れ

ごり押し。長文。ださい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>…

Local Class

c++

あまり知られていませんが、関数内でもクラスを宣言することができます。例えば、こんな感じで↓ void func(){ class Hoge{ }; } このクラスは、絶対に継承できません。なんで、これを使うと、c++でも、finalなクラスを作ることができそうです。例えば、こん…

シンプルなコンパイル時アサート

c++

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>…

apacheで、サイトにパスワードをかける方法メモ

htpasswd -c パスワードファイル名 ログイン名でパスワードファイルを作成する。httpd.confのなかに <Directory アクセス制御したいとこのディレクトリ名(フルパス)> AuthType Basic AuthName "パスワード要求時に表示されるみたい。適当に" AuthUserFile さっき設定したパスワードファイルへのパス Require valid-user </Directory>を…

自己消滅型ストップウォッチ

c++

ちょっとしたコードテスト用に作ってみた。 struct AutoStopWatch{ AutoStopWatch(){ mStartTime = clock(); } ~AutoStopWatch(){ std::cout << "time : " << (static_cast<double>(clock() - mStartTime) / CLOCKS_PER_SEC) << std::endl; } clock_t mStartTime; };</double>

クラスの関数のポインタを渡す

c++

class Hoge{ void piyo(); }; だとすると、 void (Hoge::*p)() = &Hoge::piyo; というようにする

できあがった実行ファイルの、各セグメントのサイズを知る方法

c c++

sizeコマンドを使うと、分かります。 size a.exeでOK。text,data,bss各セグメントのサイズが表示されます。 ちなみに、それぞれtext ->プログラムの本体(命令コード) data ->初期化済みデータの格納領域 bss ->未初期化データの格納領域だったはず…。

robust iterator

c++

iterate中に、removeとかinsertとかできるiteratorをrobust iteratorと言うらしい。 たぶん。

ifの()の中で変数を宣言できる。

c++

例えば、以下のようなコードが書ける。 #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>…

仮想継承とは

c++

多重継承の際 a a | | b c \ / dこーせず、 a / \ b c \ / dこーしたいときに、 class b : public virtual a { }; class c : public virtual a { }; とすると、実現できます。 これを仮想継承といいます。

shared_ptrを使った場合に起きる、相互参照によるメモリリークを防ぐためにはweak_ptrを使う。

c++

参考↓ http://d.hatena.ne.jp/naoya/20051012/1129115986相互に参照している部分をweak_ptrを使えば、余分なcountがされないので、大丈夫。 けど、できれば、こういう設計自体をしないほうが良い。たぶん。

デストラクタを、virtualにすべきとき、すべきでないとき

c++

virtualにしてると仮想関数テーブルを経由する分、関数へのアクセスは遅くなる。シビアに速度UPが要求されるような場面で、かつ頻繁に破壊と構築が行われるような場合は、できるだけデストラクタをvirtualにしない方が良いと思われ。あと、vptrの分メモリ食…

volatile修飾詞は、最適化を防ぐ

c++

コンパイラの最適化機能は、マルチスレッドプログラミングとかだと、不具合を起こす可能性があります。 mValue = 1; while(mValue){ ... //この中でmValueを変えるようなことはしない } 例えば、コンパイラは、しばしば上記のようなコードを、最適化によって…

aggregate typeの、comma初期化可能条件

まず、agglegate typesっていうのは、構造体(class)や、共用体や、配列で、以下のような条件を満たすもの。 コンストラクタがない ノンパブリックなメンバ変数がない 基底クラスがない 仮想関数がない このようなタイプに対しては、コンマで区切られたリスト…

実は、constへのポインタに対してdelete演算ができる

c++

constへのポインタに対してdelete演算ができるということを、最近知りました。 だから、以下のようなこともできてしまいます。 struct Hoge{ }; int main(){ const Hoge* p_hoge = new Hoge; delete p_hoge; return 0; } だから、どーしたってことはないんで…

newを場所に応じて使い分けることってできんのだろうか?

c++

なんとかnewを、場所に応じて使い分けることができんものかと、試行錯誤をしてみたのですが、どうにもうまくいかない。 #include <iostream> namespace WKPN1{ void* operator new(size_t size) throw() { using namespace std; cout << "wkpn1" << size << endl; retu</iostream>…

WarFTPDに乗り換え

自宅サーバーのFTPソフトは、TinyFTPを使わせていただいていたのですが、どうにも調子が悪く、2、3個ファイルをUPするたびに、フリーズしてしまっていました。 そこで、別の、WarFtpdというソフトをインストールすることにしました。設定は以下のサイトを…

prototype.jsを使って、javascriptから非同期でcgiを実行する

たぶん、こんな感じ //非同期呼び出し var ajax = new Ajax.Request("hoge.cgi", { method: "GET", onSucess: successFunc, onFailure: failureFunc } ); function successFunc(xmlhttp) { //cgi処理終了後、その出力を outputSccess IDを埋め込んだところに…

Happy Hacking英語配列版からHappy Hacking日本語配列版への移行がうまくいかない!

Happy Hacking英語配列版 → Happy Hacking日本語配列版 と移行しました。しかし、なぜか日本語キーボードとして認識してくれない! ドライバがよくないっぽいのですが、よくわからじ。 ネットで情報を探していたら、下記の記事を発見。 http://q.hatena.ne.j…

unionの初期化の癖

cpp

union Uni{ int x; char* c; }; があったとき、 Uni u[] = { 1, 2, 3 }; はできるが、 Uni u[] = { "a", "b", "c", "d" }; はコンパイルエラーとなる。つまり、宣言に最初に書いた方が優先されるということらしいです。

Vistaで、ソフトをインストールするときや起動するときに、いちいち「許可する?」とか聞かれるのがうざい!

どうやら、これはUAC(たぶん、user account control)という仕組みが動いているかららしい。 「コントロールパネル」→「ユーザーアカウント」→「ユーザーアカウント制御の有効化または無効化」を選び、「UACを使ってコンピュータの保護に役立たせる」のチェッ…

AN httpdをVistaで動かす

なんか動かんなー。困ったなー。っと思っていたんですが、普通にexeをたたくのではなく、右クリックから「管理者として実行」を選んだら、動き出してくれました。 Vista、めんどくさ! スタートアップに入れたいときは、どうすんのやろ?調査中。

unionを使って、ちょっと(いや、微かに)便利なVectorクラス

c++

union MyVec{ struct { int x, y, z; }; int v[3]; }; 構造体名を定義しないのがミソ。 定義した瞬間コンパイルエラーになってまいます。 こやつを使うと、 MyVec vec; vec.x = 0; vec.v[0] = 0; というように、2種類の方法でアクセスできます。

1桁の数字でも、頭に0をつけて、2桁にした文字列を作る方法。

c c++

もっと言うと、resoure_00,resoure_01といった名前を作る方法。 snprintf(name, sizeof(name), "resource_%02d", i); などとすればOK。%02dがポイント

Vim7.1が出たらしいです。

Vim

いつもダウンロードさせていただいているKaoriyaさんでは、Vim7.1が出るのは、まだ先のようです。 7.0になってから、重たい感じがするので、処理が、もうちょっと軽快になっているといいな。

javascriptのオブジェクトのメンバへのアクセスは全部ハッシュらしい

配列も全部ハッシュ。 んだから、極端な話、以下のようなこともできる。 arr = new Array(3); arr[0] = "0番だよ" arr[1] = "1番だよ" arr[2] = "2番だよ" //ここまではわかるけんど、 //以下もおk arr[3] = "3番だよ" なんもかんもハッシュなんで、javascr…

C標準のrand関数の生成する乱数の下位bitの質は低いらしい。

c c++

コンパイラベンダー依存だと思うのだけど、 一般にC標準のrand関数の生成する乱数の下位bitの質は低いらしい。例えば、偶数と奇数が交互に出たりしちゃうらしい。なんで、以下のようなコードは御法度 rand() % N いろいろ調べると、書くなら、こう↓ (int)((…

親子間をまたいでのオーバーロード

c++

#include "stdio.h" #include "string.h" class Parent{ public: Parent(){ strcpy(name, "parent"); } virtual ~Parent(){} char name[256]; void hoge(int i){ printf("in parent hoge\n"); printf(" name: %s\n", name); } }; class Child : public Paren…

cygwinの起動時のフォルダを指定する方法

環境変数HOMEを作り、好きな作業フォルダを指定。