C++

Rcpp・inlineパッケージを使ってC++とRを連携させる

R C++

「R単体だと遅いので計算のボトルネックはC++で書くようにすればいいんじゃないか、せっかくそのためのRcppなる便利パッケージもあるし」とずっと思っていたものの毎回インストール方法を調べることすら億劫がってやっていなかったのですが、前回の記事に書…

コピーコンストラクタ/代入演算子周りのメモ

C++

いつも書く時には忘れてて、そのたびに簡単なサンプルコード書いてるのでいい加減メモっておく。代入演算子の多重定義(オーバーロード)の際にはセオリー通りreturn *thisでオブジェクトの参照を返すのも忘れないようにする。挙動のまとめとしては Hoge x:…

templateの実装をヘッダファイルに書かないでcppファイルに書く際の書き方まとめ

C++

templateを使った関数なりの実装をヘッダに書くのはごちゃごちゃして嫌なんでcppに書いておきたいですよと。 ただコンパイル時にきちんと所望の型で関数・クラスがテンプレートから作成されるようにcppファイルの方で明示的に実体化しておかないといけません…

Visual C++でデバッグ中にポインタの中身をみる方法

C++

以下の簡単なソースコード #include <iostream> void hoge(int *x) { std::cout << x[0] << std::endl; } int main() { int *x = new int[3]; x[0] = 1; x[1] = 2; x[2] = 3; hoge(x); delete [] x; return 0; } のようにポインタを引数にとる関数の中をデバッグしてい</iostream>…

中心極限定理使って標準正規分布に従う乱数を作る

C++

「同一の分布に従う独立な乱数の和は正規分布に従う」という中心極限定理の教えを使って標準正規分布に従う乱数を生成する関数。 何か思いついて即使いたい時に特に何もインクルードしなくてもさっと使えるようにメモ。 double NormalRand() { double result…

いろんな言語で配列(リスト・ベクトル)の逆順を出す

#embedly_twitter_50281804{background:url(http://a0.twimg.com/profile_background_images/117348165/tw1.gif) #C0DEED; padding:20px;} #embedly_twitter_50281804 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;fo…

コンストラクタが勝手に代入してくれてうれしいんだけど、なんか不思議

C++

状況 クラスBがクラスAを所有 クラスCのコンストラクタがクラスBを引数として要求 って状況の時にクラスCのコンストラクタにクラスAのオブジェクトを渡しても動作しますよと。これを継承を使わないできましたよと。 ミソはクラスBにクラスAのオブジェクトを…

コンストラクタ内で例外が起こった場合の処理について

C++

C++でコンストラクタ内で例外が起こった場合、デストラクタが呼ばれないのでコンストラクタ内で確保したメモリはコンストラクタ内できちんと解放しておかないといけない。 C++ではNULL(0)ポインタに対するdeleteが問題ないことになっているのでそれをうまく…

bitsetを使う

C++

STLのbitsetの使い方がいまいちよくわからなかったので、動作確認も含めてまとめる。 #include <bitset> #include <iostream> using namespace std; int main() { // initialize 8bit bitset as 1 bitset<8> bs((long) 1); cout << "original : " << bs << endl; //make all bi</iostream></bitset>…

TopCoder用のなんか

C++

自分用。随時更新数値を文字列化 #include <sstream> #include <string> using namespace std; string IntToString(int number) { stringstream ss; ss << number; return ss.str(); } 1文字を数値化 int CharToInt(char x) { return atoi(&x); }</string></sstream>

警告「warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。」を回避する

このエラーの直し方についてはエラーコードでググルといろいろと情報が出てくるが、QuantLibのヘッダーファイルはたくさんあって全部直すのめんどくさいし、置換ミスって動かなくなるのも嫌なので、警告を表示させないようにすることで対応。やり方は【プロ…

Memento パターン

Memento パターン - Wikipediaオブジェクトを以前の状態に(ロールバックにより)戻す能力を提供、要するにわかりやすい例だとCtrl+Zですね。Caretakerが戻すための状態(Memento)の保持を行い、Originatorが自分の状態を元に戻す仕事を担当するというように役…

Observer パターン

Observer パターン - Wikipedia観察対象の状態が変化すると、観察者に対して通知される。Mediator パターンと良く似ているが、パターンの目的や視点は異なる。MediatorパターンではColleague役の間を取り持って、いろいろ処理を融通してやるために状態変化の…

Mediator パターン

Mediator パターン - Wikipediaオブジェクト(Colleague)間の通信を仲介者(Mediator)を通して行うことによって、オブジェクト同士の結合強度を下げる・モジュール間の依存度を下げることができる。以下の例はMediatorとしてチャットルームの管理者的なもの…

Facade パターン

Facade パターン - Wikipediaごちゃごちゃなクラス群を使用するための処理を、Facade(建物の正面の意味らしい)という窓口作ってそこに集約することで見やすくする感じ。あんまりおもしろくない。以下のコードはWikipediaのJAVA版をC++に直したもの。 #inclu…

Chain of Responsibility パターン

Chain of Responsibility パターン - Wikipedia複数のオブジェクトを鎖のようにつないでおき、そのオブジェクトの鎖を渡り歩いて目的の処理ができるまでたらいまわしにする。ここではNoSupport→LimitSupport→OddSupportクラスのオブジェクトの順に渡り歩き処…

Visitor パターン

Visitor パターン - Wikipediaデータ構造(Element)と処理(Visitor)の分離を実現。これにCompositeパターンを組み合わせると面白い。 ConcreteVisitorの追加は容易な一方、ConcreteElementの追加は難しい。ダブルディスパッチ - Wikipediaも関係があるので合…

Decorator パターン

Decorator パターン - Wikipediaオブジェクトにどんどんデコレーションをくっつけていくようなイメージ。実際にはどんどんオブジェクトをかぶせていく。くっつけられていくものは”機能”。以下の例はwikipediaに載って得いたJAVAのコードをC++に書き変えたも…

Composite パターン

Composite パターン - Wikipedia容器(Composite)と中身(Leaf)を同一視(Component)して、再帰的な構造を作るデザインパターン。以下の例のようにファイルとフォルダの関係のようなもん。一般に木構造で書けるものはこのパターンが当てはまる。addメソッドをど…

Strategy パターン

Strategy パターン - Wikipediaアルゴリズムを簡単に切り替えることができるようにしておくことで、同じ問題を別の方法で解くことを容易にする。Strategy パターンの クラス図は Bridge パターン - My Life as a Mock Quantのものと表面的には同じ。 #include<string></string>…

Builder パターン

Builder パターン - Wikipedia構造をもったオブジェクトを作成するパターン。構造を作り上げる過程の詳細はDirectorが隠ぺい。またDirectorは建築会社(Builder)にオブジェクト(今回はテキスト)の作成を依頼するものの、どこの会社(Text or HTMLBuilder)…

Prototype パターン

Prototype pattern - Wikipediaクラスからオブジェクトではなく、オブジェクトからオブジェクトを生成するパターン。Product(Prototype)だけを扱うManager(Client)が、UnderlinePen(Concrete Protype)を知ることなく新たなオブジェクトを生成することができ…

参照・ポインタ使い分けのとりあえずのルール

C++

久しぶりにC++書いてて思ったこと&思いだしたマイルール的なもの。 クラスのメンバ変数はポインタ オブジェクトの後始末を相手に渡す時はポインタ渡し そうじゃないときは参照 デザパタで書いた奴は上のルールに沿ってないのもあるけどいいや。

Bridge パターン

Bridge パターン - Wikipedia 「実装のクラス階層(Implementor)」と「機能のクラス階層(Abstraction)」を分けて、2つの独立したクラス階層にする。ついでに参照とポインタの関係も怪しかったのでいろいろやった。 #include<iostream> #include<string> using namespace std; /</string></iostream>…

Singleton パターン

Singleton パターン - Wikipediaそのクラスのインスタンスが1つしかないことを保証。一見簡単に書けるけど、単純に書いてしまうと(以下の例はすべて)マルチスレッド化した際に破たんするという実は奥が深いパターン。 参考LINK マルチスレッドにおける si…

Factory Method パターン

Factory Method パターン - Wikipediaインスタンスを生成する工場をTemplate Method パターンで構成したもの。Factory(Creator)でProduct(Product)の生成手順を記述しておいて、IDCardFactory(Concrete Creator)にIDCard(Concrete Productの作り方の詳細を記…

Template Method パターン

Template Method パターン - WikipediaAbstractDisplay(AbstractClass)で処理の骨組みを規定して、CharDisplay・StringClass(ConcreteClass)で処理の内容を具体化。 #include <iostream> #include <string> using namespace std; //AbstractClass class AbstractDisplay { publ</string></iostream>…

Adapterパターン

Adapter パターン - Wikipedia 上記LINKにある「委譲を利用したAdapter」の方で実装。継承を利用した版はC++だと多重継承になるんでめんどい。 Bannerクラス(Adaptee)が既に手元にある時、それをPrintBanner(Adapter)に委譲して、Printクラス(Target)として…

Iteratorパターン

完全にデザインパターンを忘れているので、復習を兼ねて1通りやっていこうと思う。手元ではJava言語で学ぶデザインパターン入門を見ながらやっている。 というわけで、今回はIteratorパターン。 Iterator パターン - Wikipedia だいたいどの言語でも実装さ…

C++ でXLLアドインを作る with XLW−3〜関数作成&XLWについて〜

C++

過去の記事 C++ でXLLアドインを作る with XLW−1〜インストールからサンプルソリューション実行まで〜 - My Life as a Mock Quant C++ でXLLアドインを作る with XLW−2〜サンプルソリューション解説とXLLのデバッグ方法〜 - My Life as a Mock Quant 前回…