この記事は Vim Advent Calendar 2012 101日目の記事になります。 お陰様で100日目を迎えることが出来ました。 Vim Girl ちゃんかわいいよ Vim Girl ちゃん。 参加者はまだまだ募集中なのでとっておきのネタやプラグインなんかを紹介してみるといいと思います。 また、既に参加していて2回目もやりたい!って方はこの記事へコメントして頂けばスケジュールに追加するのでぜひ! [quickrun.vim について] quickrun.vim とはバッファ上のソースコードを実行して、その実行結果を Vim へ出力する為のプラグインです。 quickrun.vim を使用する事で、素早くソースコードを実行することができ、また Vim との連携を高めることが出来ます。 [導入方法] quickrun.vim は github で公開されておりそこから取得する事が出来ま
Beautiful Native Libraries written on Sunday, August 18, 2013 I'm obsessed with nice APIs. Not just APIs however, also in making the overall experience of using a library as good as possible. For Python there are quite a few best practices around by now but it feels like there is not really a lot of information available about how to properly structure a native library. What do I mean by native li
スプレー木(スプレーき、英: splay tree)は、平衡2分探索木の一種で、最近アクセスした要素に素早く再アクセスできるという特徴がある。挿入、参照、削除といった基本操作を O(log(n)) の償却時間で実行できる。多くの一様でない一連の操作において、その順序パターンが未知の場合でも、スプレー木は他の探索木よりもよい性能を示す。スプレー木はダニエル・スレイターとロバート・タージャンが発明した。 2分探索木の通常のあらゆる操作は、「スプレー操作」という1つの基本操作と組み合わせられる。スプレー操作とは、特定の要素が木の根に位置するよう再配置を行うことである。そのためには、まず通常の2分探索木での要素の探索を行い、次にその要素がトップになるように木の回転を行う。別の方法として、トップダウンアルゴリズムで探索と木の再配置を単一フェーズに統合することもできる。 長所と短所[編集] スプレー木
FNVハッシュ関数は簡単に実装できるハッシュ関数です。 Twitterで見かけたので忘れないうちにメモ。 FNV-1 hash hash=offset_basis for each octet_of_data to be hashed hash=hash*FNV_prime hash=hash xor octet_of_data return hash octet_of_dataは変換元データから8bitずつ取り出した物を表します。変換元データがアルファベットだけから成る文字列なら、一文字ずつ取り出すのと同じです。 offset_basisとFNV_primeについては後述します。 FNV-1a hash XORを先にするだけです。変換元のデータが32bitよりも小さい場合はハッシュ値の分散度合いが良くなります。 hash=offset_basis for each octet_of_da
[編集] 意図[編集] コンストラクタの初期化リスト中で同じ型の例外を送出しうる 2 つ以上のオブジェクトを初期化する際に、例外を送出したデータメンバを識別する。 別名[編集] 動機[編集] コンストラクタの初期化リスト中で 2 つ以上のオブジェクトを初期化し、その全てが同じ例外(std::exception) を送出しうる場合を考えよう。この際、初期化リストの周りには、ただ 1 つの try ブロックしか置けないため、どのオブジェクトの構築が失敗したかを追跡するのはやっかいな問題になる。そのような try ブロックは関数 try ブロック(function-try block)に過ぎないが、「コンストラクタ try ブロック」という特別な呼び名を持つ。 解法とサンプルコード[編集] 生成の追跡(Construction Tracker)イディオムは、初期化リスト中での正常なオブジェクトの
[編集] 意図[編集] 最初に使用される前に、オブジェクトが初期化されることを保証する。 特に、非ローカル静的オブジェクトに対して保証する。 別名[編集] 遅延生成・評価 動機[編集] 自明でない(non-trivial)コンストラクタを持つ静的オブジェクトは使用前に初期化されねばならない。十分な注意を払わないと、初期化されていない非ローカル静的オブジェクトをアクセスしてしまう場合がある。 struct Bar { Bar () { cout << "Bar::Bar()\n"; } void f () { cout << "Bar::f()\n"; } }; struct Foo { Foo () { bar_.f (); } static Bar bar_; }; Foo f; Bar Foo::bar_; int main () {} 上記コードでは、Bar::f() が Bar の
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く