C++

コードの最適化

関数 #include <stdio.h> void func1 (int x, int a[]) { int i, j; for (i = 0; i < 10; i ++) { a[i] = i; } } int main (void) { int x[10]; func1 (5, x); return 0; } gcc -O0 -S でこんぱいる .file "ex4.c" .text .globl func1 .type func1, @function func1: </stdio.h>…

while(1){LOVE++;}を最適化

最近ツイッターで "while(1){LOVE++}"と書き込まれてる指輪があって、 そのソースは最適化でLOVEが消えてただの無限ループになる云々という話があったので検証。 http://togetter.com/li/144840 用意したソースはこちら。 int main() { int LOVE = 0; while(…

ポインタとか文字列とかなんだとか

C C++

ポインタと、ポインタと配列の関係と、文字列についてやってほしいと言われたのでこないだ話したの。 プログラム自体が初めてという人と、それなりの手練と、C以外ならそれなりとか、たくさんのバックグラウンドの人がいる。 プログラム初心者は授業でもう習…

何故ポインタは変数の型情報が必要なのか

C C++

とらのかいでよい質問がされたので答えてみる。 ポインタは変数のアドレスを格納する変数の事。 アドレスは32bitのOSならば4byteで表現でき、 当然それの値を格納するポインタも4byte。 元の変数の型が違ってもすべて4byte。 なら何故、アドレス型とかにしな…

Range Adaptors

C++

Range Adaptorsやべぇぇぇーーー! http://www.boost.org/doc/libs/1_45_0/libs/range/doc/html/range/reference/adaptors/reference.html 先の日記のRange Adaptors版vectorに格納されたクラスのメンバ関数を呼び出し、 戻り値の総和を得る。 #include <boost/range/numeric.hpp> #in</boost/range/numeric.hpp>…

Boost.IteratorのSpecialized Adaptors

Specialized Adaptorsだけでも知っとくと超便利だった。 Specialじゃないのはよくわかんないけど(ぇ とにかくすごいんだって http://www.boost.org/doc/libs/1_45_0/libs/iterator/doc/index.html#iterator-utilities http://shinh.skr.jp/boost/iterator_a…

Boost.Graphのタグとかプロパティとか

C++

卒論で回りくどいと思ったりしたところ ・adjacency_listの辺や頂点には、自ら定義したプロパティも付加できる。 //おれおれタグ struct hoge_t { typedef vertex_property_tag kind; }; typedef adjacency_list< vecS, vecS, directedS, property<hoge_t, double>, property<edge_weight_t, int></edge_weight_t,></hoge_t,>…

will be initialized after

gccで書いてたらこんな警告がコンストラクタに。 最初これ何だろうと疑問に思ったけど、 どうやらメンバ変数の宣言の順番と、 コンストラクタの初期化リストの順番は一緒にしなくちゃ駄目ということだ。 へーとか思ってたら普通にEffectiveC++(第3版)の第4…

gdbメモ

stopした時点から関数の呼び出し履歴を表示する backtracebacktraceで表示されたframeを指定、そこまで戻る frame ??はframeの数字を指定。 IDE使ってる時と遜色なく使えるようになってきました。

なるほど

先日書いた日記から。 http://d.hatena.ne.jp/MARISHI/20101208/1291820573 mapのイテレータにfor_eachとかを使う場合の例で for_each( m.begin() , m.end() , boost::bind( &Hoge::func2, boost::bind( &HogeMap::value_type::second , _1 ) , 1 , 2 ) ); …

内部状態を持つ関数オブジェクト

http://www.kijineko.co.jp/tech/superstitions/functor-is-not-copied-in-algorithm.html ここここここまでしなくちゃいけないのん?・・・ 今までこーいうのふっつーに書いてたんだけど。 現在進行形で書いてるし。

述語を純粋関数にしよう

EffectiveSTL第39項より。 え。この規則破ってるプログラムをどっかで書いた覚えがある。 やっべ。 gccはどうなっとんぞ //3回operator()が呼び出された時true struct Predicate { private: size_t timeCalled; public: Predicate() :timeCalled(0){} bool o…

bindでちょっと試し書き

てすとてすと こんなのがありまして struct Hoge { void func1()const{/*hoge*/} void func2(int a,int b)const{/*hoge*/} }; vectorとかだったら vector<Hoge> v; //要素追加とかして for_each( v.begin() , v.end() , boost::mem_fn( &Hoge::func ) ); まぁこれ</hoge>…

連想コンテナとポインタ

連想コンテナ、例えばsetの要素にポインタを使いたいとき、 predは自分で書かなくちゃあかん。 string StringPtrLess { bool operator()( const string* lhs , const string* rhs ) { return *lhs < *rhs; } }; set< string* , StringPtrLess > str_set; Eff…

swap技法

Effective STL 第17項 余分な容量を取り除くには「swap技法」を使おう まずはこのソース。 vectorのサイズを100として、サイズと容量を確認。 次に最初の要素から50番目の要素を削除して、再度サイズと容量を確認する。 vector<int> v(100); cout << v.size(</int>…

removeの注意点

Effective STL 第9項 消去オプションは注意して選択しよう連続メモリコンテナContainerがある Container<int> c; このコンテナに含まれている100という値を全て取り除きたい場合、 eraseとremoveを用いる。 慣用的には以下のような記述がある。 c.erase( remove(</int>…

Effective STL読書その2

☆項目4 size()で0を調べる代わりにemptyを呼び出そう そうですね。

Effective STLその1

読んだら項毎に、せめて感想ぐらいは書こうと思う。 頭に残らない。1日2項を目標にする。 ☆項1 コンテナは注意して選択しよう ・標準以外のコンテナ multi_arrayとかmatrix使ったことあるけど、他はあんまり無いなぁ。 ropeとか何それ。・stringの代わりにv…

Boost.Graph.Stanford_graphを使ってみた

むずひ・・・ bglむずひ それに輪をかけて、という表現は適切では無いけど、stanford_graphがあちこち分からん。 まぁ、とりあえず動いたんだけれども。 というわけで使用レポート。半分ぐらいstanford_graph関係ないけど。 間違ってたり適当な事言ってたら…

numeric_limits

そうか、こんなのもあるのか。 cout << "Minimum value for int: " << numeric_limits<int>::min() << endl;</int>

T x = {0};

T x = {0}; http://cpplover.blogspot.com/2010/09/blog-post_18.html 「Tの最初の要素あるいはメンバーを、0で初期化し、その他をすべて、staticストレージと同じ方法で初期化する」という意味である。 へー知りませんでしたYO! 気になってました。

魔導書読んだ

ビャーネさんへのインタビュー 全部を理解しようとするよりもプログラム書け! 的な事をおっしゃられてました。 僕とかはもっと勉強するべきですが、そういう人もいるかもしれません。 boost::serialization クラスのインスタンスの情報を、テキスト、xml、…