あめだまふぁくとりー

Boost.Graphとかできますん

先読みiteratorアダプタ作ってみた

C++

指定した値分だけiteratorが進んで見える(つまりstd::advance(it, n))ようなiteratorアダプタを作ってみました. Boost.Rangeのslicedでも同じようなことができるのですが, このアダプタはbase()では元の場所を指したiteratorを返します. 式で書くと*it == *(…

std::pair<Iterator, Iterator>をrange based forで使用する

C++

C++11にはrange based forが加わり,rangeに対する走査処理を書くのが楽になりました.しかしながら,このstd::pair<Iterator, Iterator>で表されるIterator対はこのrangeには含まれません*1. そのため以下のようなコードはコンパイルエラーになります. #include <iostream> #include <map> in</map></iostream></iterator,>…

Boost1.55でMultiple Source Dijkstra

C++

この記事はC++ (fork) Advent Calendar 2013の22日目の記事になります. 今回も軽めの記事です.ご了承ください.Boost1.55ではBoost.Graphの関数boost::dijkstra_shortes_pathsがマルチソースに対応しましたので,本記事ではこれを紹介します. dijkstra_sh…

アルゴリズムとか意味がなかった

https://paiza.jp/poh/ec-campaign に挑戦してみましたので,そのコードを載せておきます. #include <iostream> #include <vector> #include <algorithm> template <class Iterator> inline int calc(Iterator const first, Iterator const last, int const value) { if (*(last - 1) + *(last - 2) <= va</class></algorithm></vector></iostream>…

boost::adjacency_listのVertexListテンプレート引数とvertex_indexの関係

id:faith_and_brave:20131003:1380788496に関して少しばかし補足. まず,知るべきことはboost::adjaceny_listのテンプレート引数を省略した場合である.この場合,以下の引数を指定したものとして扱われる. boost::adjacency_list< boost::vecS, // OutEdge…

Propety_iter_range

BGLといえばPropertyMap,PropertyMapといえばBGLなのだが,BGLのアダプタ関数はイテレータのペアであるRangeを返すなのでBGLとPropertyMap,Rangeをうまく組み合わせて使いたい. で少し調べてみたら,BGL内にproperty_iter_rangeというのを発見.property_…

GitHubのリポジトリからのみファイルを削除する

ローカルリポ上のファイルは残しながら,GitHubのリポからファイルを削除する方法が分からなかったのでメモ. git rm --cached filenameでOK.初めは-nかと思ってたのだが何も変わらなくて?だった.

Graph Layoutが使えない件

BGL

BGLのGraph Layoutは名前そのままグラフのレイアウトを行うアルゴリズム群. Random LayoutやCircle Layoutなど基本的なものから,Kameda Kawaiアルゴリズムといったものまで揃ってる. これらのアルゴリズムはTopologyと呼ばれるTraitsを持つことで,いろい…

コンテナとは違うのだよコンテナとは

はにゃー.修論提出・発表と論文提出が被って停滞してしまっていました.修論まだ提出できる段階じゃないけど徐々に復活でふ! What is the difference between a std::map and a boost::associative_property_map ? When a nonexisting key value is given …

今日覚えたVimコマンド(:タブ挿入)

Vim

set expandtab状態でもでタブを挿入可能だったんですね〜.知りませんでした,はい. 休日の間にちょっとだけVimいじったりプラグインいれてみたりしてみた.vimrcは見やすくしてステータスラインの表示を追加した程度.あと補間対象からインクルードファイ…

property_map_iterator…だと…?

C++

make_property_map_iterator プロパティマップとそのキーを指すイテレータからプロパティマップの値・参照を指すイテレータを作る make_iterator_property_map ランダムアクセスイテレータRAとインデックスマップからRAが指す参照を返すプロパティマップを作…

今日覚えたVimコマンド(%:対応する括弧へジャンプ)

Vim

寝て起きるまでは12日なのだ!問題ない!今までVimは一通りコマンド覚えて軽いスクリプト組んでた程度なのでもっと効率的に使えるようになりたい.で,大学の図書館でVimテクニックバイブルを借りることができたので,ちゃんとVimの勉強をしようと奮起してみ…

情緒不安定週間

日付を見て今日ポッキープリッツの日じゃんと一瞬思ってしまったが,11月でしたね….勢いで論文書き上げたせいで修正が難しいです,一貫性とか特に. あ,話は変わりますけどsubgraphアダプタちょっと微妙ですね.どのへんが微妙かはいつか纏めると思います.

ぷっとも関数おぶじぇくと

C++

プロパティマップを関数オブジェクトに変換するproperty_map_functionはSTLやboostのアルゴリズム,イテレータを使う際大変便利.でもこれはgetはできてもputができない.getのときはアルゴリズムでputのときはループ回すとかやだ!get,putは大抵関数テンプ…

修論の要旨終わった〜

あーつかれた〜.なんども読み返して目が痛い….なんであんなに誤字脱字をしてしまうんやろうか.指定されたフォーマットが二つあってそれぞれ微妙に違うのはなんとかしてほしい.

using declaration使えばいいじゃない

BGL

アホな話 まえがき BGLのアルゴリズムを適用できるグラフ構造にはBGLに含まれているadjacency_list等だけでない.自分自身で定義したグラフクラスやBoost以外のライブラリのグラフクラス,さらにvectorや配列等までありとあらゆるものBGLのアルゴリズムに適…

static_property_mapとconstant_property_map

BGL

Boost.PropertyMapには指定した値を常に返すstatic_property_mapというプロパティマップがある.一方BGLにも指定した値を常に返すconstant_property_mapがある.前者は,後者はをインクルードすることで使用できる.それぞれのクラス定義は次のようになって…

バグ(directed_graph, undirected_graph)

BGL

BGLにはadjacency_listをラップしたdirected_graph,undirected_graphクラスがあるんだけどバグを発見(Version 1.48.0です). #include <boost/graph/directed_graph.hpp> #include <boost/graph/undirected_graph.hpp> using namespace boost; int main() { directed_graph<> dg(5); graph_traits<directed_graph<> >::vertex_descriptor dv = </directed_graph<></boost/graph/undirected_graph.hpp></boost/graph/directed_graph.hpp>…

2012年は本気を出すといったな.あれは嘘だ.

資格のための勉強っていまいちやる気がでないのよね.TOEICとかも同じ.でもこつこつやらんといかんのよね. 昨日のやつ d:id:amedama41:20120104でproperty_map_functionのサンプルコード書いたけどあれよく考えたら別にmake_property_map_functionいらない…

ぷろぱてぃーまっぷ

BGL等でproperty mapを使っていると,たまにproperty mapをfunctorとして扱いたいときがある.そんなときにはproperty_map_funcionが使える.property_map_functionはproperty mapをfunctorとして扱うためのラッパオブジェクト.make_property_map_function…

graphvizでノードの座標指定

メモ neato -n1 -Tpng result.dot -O n1でgraphviz標準のレイアウト法を無効になり,node属性のpos=x,yが有効になる. あとは原点を左上に持っていく方法を知りたい.ノードで言い方は個人的にはあまり好きでない.NodeよりVertex派なのよね.

さらばTR1

C++

むぅ.やっぱりこんなことはできないのか. #include <iostream> #include <tr1/tuple> using std = ::std::tr1; // エラー int main() { std::tuple<int, int, int> t = std::make_tupple(3, 4, 5); std::cout << std::get<0>(t) << std::endl; } C++11を使ったり使わなかったりするからコードを</int,></tr1/tuple></iostream>…

新年の抱負

新年あけましておめでとうございます. 新年の抱負とか書きましたけど今まで新年の抱負とか立てたことないんで何を抱負にしたらいいのやら….まぁプログラミング以外の趣味が全然ないので新しい趣味でも見つけたいですね.運動不足感があるので体を動かす系…

大晦日

あとちょっとで新年だけど一人で修論書く以外にすることないよ…. private継承の名前探索 class Base1 { public: void f() { } }; class Base2 { public: void f() { } }; class Derived : public Base1, private Base2 { }; int main() { Derived d; d.f();…

純粋仮想関数の頃には…

C++

なにごとも何故そうなっているのかを考えるのが重要である.その"何故"を理解することで今まで見えなかったことが鮮明に見え,新しい世界が開けるのかもしれない….と言う訳で本題はこれ↓ class Hoge { public: virtual void method() = 0; }; そう!純粋仮…

関数呼び出し

C++

関数名の探索の勉強.関数呼び出しではどの関数が呼び出されるかを決めなければならない. まず関数が呼び出されたスコープ内で呼び出される関数の名前の探索が行われる.このときADL(Argument Dependent name Lookup)によって引数の型が定義された名前空間…

デストラクタ内でのvptrの書き換え

C++

Effective C++第3版の9項に「コンストラクタやデストラクタ内では決して仮想関数を呼び出さないようにしよう」とある.基底オブジェクト生成時に仮想関数を呼び出すと,その基底オブジェクトを型とした場合の仮想関数呼び出しとなる…!このとき思ったのが「c…