C++

型消去

C++

わすれなにうちにメモ. Factory とか実装したときに使った. http://www.google.com/search?hl=ja&client=opera&hs=U61&rls=ja&q=C%2B%2B+%E5%9E%8B%E6%B6%88%E5%8E%BB&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=

C++ で継承したときにサブクラスのメンバ関数を呼ぶためには virtual をつけて仮想関数にする

C++

いや,このネタは半年くらい前に学んだ話の超初歩だと思うんですけど. C++ で Factory Method について書こうと思ったときに,とりあえずここからまとめておこうかと.ようするに,A というクラスを継承した B や C があって,そいつらを使うときには,型 A…

リソース管理

C++

リソースを開放するコードを直接書かなければならないなら(つまり,リソース管理オブジェクト以外の場所にdelete文を書かなければならないなら),何かが間違っている Effectove C++ 第3版 p64. リソース管理 あとでもう一度読む. Effective C++ 原著第3版…

boost::scoped_ptr

どっかで new したやつは delete しないとメモリリークする. で,メモリリークわすれをなくすため,スコープを抜けたときにメモリを開放してくれるようにしたい.ってことで scopred_ptr // scpptr.cpp #include <iostream> #include <string> #include <algorithm> #include <boost/scoped_ptr.hpp> using name</boost/scoped_ptr.hpp></algorithm></string></iostream>…

コンパイル結果のキャッシュ

C C++

% ccache gcc ... % ccache g++ ...または, % CC="ccache gcc" CXX="ccache g++" ./configure ...みたいな.

パラメータ化継承 (C++テンプレートテクニック)

こんなこともできるのか.と目から鱗だった話. pp74, 3-6 から. ほとんど本のサンプルのままだけど: // extend_param.cpp #include <iostream> #include <string> using namespace std; class text { public: text() {} ~text() {} string out(const string& str) const { r</string></iostream>…

C++ テンプレートテクニック Chapter-2 基礎

ああ,そうだったんだ,みたいなことがたくさん.ぼちぼち読み始めた. まだまとまってないけど.あとでちゃんとコード書く. 2-2 明示的なインスタンス化 この節がよくわからない.あとでまた見る. デフォルトテンプレート引数 関数テンプレートではつかえ…

autotools で生成した実行ファイルはただのスクリプトファイルだから

gdb とかするには libtool とかでほげってしないと, % gdb ./hoge ... hoge: not in executable format: File format not recognizedってエラーでてだめ. % libtool --mode=execute gdb ./hogeとかやる.

Glib/Timers のラッパー

てことで,書いた.(ちょうてきとう これで少し楽になった.はっは. #include <iostream> #include <glib.h> #include <unistd.h> using namespace std; class GTimerP { private: GTimer *Timer; gulong microseconds; gdouble time; public: GTimerP() { Timer = g_timer_new(); } ~G</unistd.h></glib.h></iostream>…

glib インストール / コンパイル

インストール@Ubuntu % sudo aptitude install libglib2.0-dev パスの通った場所に glib.h ははいらない バージョンを明示的に指定するためなのかな? -I とか -l とかつけないと,エラーいろいろでる. hoge.cpp:10:18: error: glib.h: No such file or di…

コンパイラオプション・gdb

C C++

-g -Wall デバッグ情報をのこす,警告をすべてだす gdb a.out > r run > bt backtrace > l list

string -> int キャスト

C++

ようするに、1文字ずつ cast したらいいのかもしれないんだけど。 で、あれですね、static_cast(char) の場合、1文字が、asciiコードになるので、「 - '0'」とかしてやると数値になるわけですね。で、文字列をintにしてやろう、とか考えると、 #include <iostream> #in</iostream>…

string

C++

#include <iostream> #include <sstream> #include <string> using namespace std; int main() { string hoge = "hoge", fuga = "fuga"; // some method of std::string cout << hoge << endl; cout << hoge.length() << endl; cout << hoge.at(1) << endl; cout << hoge.substr(1,2) <<</string></sstream></iostream>…

vector::iterator

C++

久々にC++さわったらだいぶわすれてたからリハビリからはじめる。 #include <iostream> #include <vector> #include <string> using namespace std; void print_vector (string name, vector<int> &v) { cout << "vector:\t" << name << endl; int i = 0; for (vector<int>::iterator it = v.begi</int></int></string></vector></iostream>…

C++テンプレートテクニック / メタヒューリスティクスの数理

今処理中の本すら読み進めているのが追いついていないのに、また買ってしまった。まあなんていうか大丈夫なのかね。本ばっかり買って身に付いてないとか一番痛いからそこだけは注意しないとなあ、とは思うんだけど。 C++テンプレートテクニック作者: επιστημ…

有向グラフの標準データ構造

C++

@sotarok Rubyでちゃかちゃかやった後にC++で実装してみる予定なのでboostのgraphのやつ「使わない」で実装したのをBlogに上げてもらえると助かりま(ry Yasuhisa Yoshida on Twitter: "@sotarok Rubyでちゃかちゃかやった後にC++で実装してみる予定なのでboo…

演算新のオーバーロードとかテンプレートとか

C++

まあ適当に練習がてら。 #include <iostream> #include <string> template <typename _First, typename _Second> class foo_pair { private: _First _first; _Second _second; public: foo_pair(const _First& f, const _Second& s) { _first = f; _second = s;} foo_pair(const foo_pair<_First, _Second>& p) { _first = p.first();</_first,></typename></string></iostream>…

STLは省エネ

C++

前自分の作った queue クラスと、STLコンテナの queue を比較してみたらとんでもない違いがでて、STLすげえなあ、と思いつつ。あ、時間もメモリも1/3くらいだった。 1000万のデータのpush->pop。 % time ./queue_test_1000 after initialize: queue data : 0…

Boost Graph

Boost のグラフ構造を扱うライブラリ.てことで少しさわり中.確かに,頂点リスト,接続辺リスト,走査処理とか自前で実装するのもなんかな,とは思っていたのでちょいちょい使い方を見てる. キモは, graph_traits と adjacency_list によって適度に抽象化…

コピーコンストラクタとコピー代入演算子の自動生成を抑制する

C++

通常コンパイラが自動生成するコピーコンストラクタと代入演算子を生成させないようにする.Effective C++ 6項. // copyable.cpp #include <iostream> using namespace std; class User { public: User(){} User(const string n, const int a): name(n), age(a) {} ~U</iostream>…

const

C++

const なポインタはどっちがどっちだか混乱するなあ. * の左側に const があるとポインタが指し示すものが const になり,*の右側に const があるとポインタが const になるわけですよね. // const.cpp #include <iostream> int main() { int one = 1; int two = 2; </iostream>…

買ってきた。 ひとつはなんか網羅的にUnixプログラミング系の知識をつけたいなーと思ったから。Amazonの評価もよかったし。ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道作者: 青木峰郎出版社/メーカー: ソフトバンククリエ…

クラステンプレート

C++

#include <iostream> using namespace std; struct point { int x; int y; }; template<typename T>class base { private: T data; public: base(T); void set_data(T); T get_data(); }; template<typename T> base<T>::base(T d) { data = d; } template<typename T> void base<T>::set_data(T d) { data = d; }</t></typename></t></typename></typename></iostream>…

コンパイルとリンク

C C++

http://docs.sun.com/app/docs/doc/805-7886/6j7drf0sr?l=ja&a=view

じゃあどうすんの?

C++

次 ほかの型で使えるように汎用のテンプレート化 宣言と実装を分けてヘッダファイルつくってコンパイルしてリンク>めんどいのでMakefile書く インスタンスがコピーされるときどうする?ポインタでしか使えない? コピーしたら表面のqueueはディープコピーに…

C++速いなあ

C++

10,000,000のデータを2つのキューにひたすらつめこんで,ひたすらdeqした場合 % time ./a.out >/dev/null ./a.out > /dev/null 4.39s user 2.38s system 99% cpu 6.788 totalPHPのarray_pushとarray_shiftで同じようなことやってみたら,10000個くらいのデー…

キュー改良

C++

キュー - sotarokのお勉強 Exceptionの練習としてデータ範囲のチェックと,空のキューも使えるようにした.前回のキューだと1個以上データがないと使えないとかあった.一応,メモリリークしないことも確認した.valgrind使ってみた. http://kzk9.net/colum…

読了

C++

読み終えました. 最後の方のSTLの使い方とか具体的なコードの部分は多少読み飛ばしたけど.あとは実際に書きながらちょいちょい立ち戻ればい良いかな,と. C++実践プログラミング作者: スティーブオウアルライン,Steve Oualline,望月康司,クイープ出版社/…

delete後の扱い

C++

delete演算子がどう働くかいまいちわからない - sotarokのお勉強 だけど,あれは実行環境がMac OSXのほうで,(g++のバージョンは今は確認できない.帰ったら確認するかのう)CentOS 5.2の, % g++ --version g++ (GCC) 4.1.2 20071124 (Red Hat 4.1.2-42) C…

まあ本もちゃんと読んでいたりはして

C++

でも最後の方になってきて、STLの使い方とかになるとまたちょっと飛ばし飛ばしってかんじだなあ。テンプレート使ってなにか定義してみるか。ああ、キューせっかく書いたから拡張させてみるか。。とか。。 で、一応488ページ。C++実践プログラミング作者: …