STL

GCC (libstdc++) 付属の STL をマルチスレッド環境で使うにはどういう設定が要るんでしょうか?という基本的な疑問

あったあった. When you link a multithreaded application, you will probably need to add a library or flag to g++. This is a very non-standardized area of GCC across ports. Some ports support a special flag (the spelling isn't even standard…

lexicographical_compare_3way

なぜ SGI STL のドキュメントでは lexicographical_compare_3way に明示的な StrictWeakOrdering を指定させるバージョンがないのかとゆ〜本当にしょーもねー疑問.2つの range の長さが等しくて,かつ2つの range の対応する要素がすべて (strict weak orde…

ちなみに……

うちの赤黒木のばあい やっぱり番兵に一難あるかも(例えばリンクポインタだけを partial construct) (ここで赤黒木なだけに色々あった.回転とか recoloring とか回転回転とか) (お,俺がんばったよね?もうゴールして良いよね?) comp( node_value, v…

Let's reimplement (not reinvent) the wheel

いやいや, std::vector も std::list も簡単なよーに見えて,「例外安全」という4文字を考え出した途端に吐き気を催すことうけあい.マジお勧め. 何がしんどいって実装もしんどいけれどテストもしんどい.ある一定回数コピーしたら例外が飛んでくるような…

std::unique の仕様

std::unique の仕様が気に入らにゃい.ソート済みの範囲を受けることを事前条件とした上で,述語として StrictWeakOrdering を指定させ,その Ordering から誘導される同値関係を満たす隣接要素グループの最初の1つを残してあと全部を削除するという仕様の方…

vector/deque を実装したことがありますか?

std::vector もしくは std::deque に互換なシーケンスを実際に実装した(車輪の際発明をした)経験があるかどうかは,多分以下の質問をすれば判別できると思うのでした. 実装が一番大変なメンバ関数はなんですか?

Rvalue reference - 右辺値参照 (was: Move semantics)

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1377.htm http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1690.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1770.html http://www.open-std.org/jtc1/sc22/wg21/…

std::map + boost::tuples::tie + BOOST_FOREACH

以下のコードは,Boost1.32.0に加えてここにあるforeachのヘッダをboostのディレクトリに放り込んである必要があります. #include <map> #include <string> #include <iostream> #include <boost/tuple/tuple.hpp> #include <boost/foreach.hpp> using namespace std; using namespace boost; int main() { map m; m["衛"] = "</boost/foreach.hpp></boost/tuple/tuple.hpp></iostream></string></map>…

定理:厳密で弱い順序から導出される商集合上の厳密な全順序

を上の厳密で弱い順序とする.が定義する同値関係に関するの商集合を考え,上の2項関係を以下のように定義する. ここではの要素である.このときは上の全順序となる. 証明) をの任意の要素とする.に対してである.従って常にが成り立ち従って非反射性を…

定義:[厳密な]全順序([Strict] Total Order)

集合上の2項関係が全順序であるとは,以下の条件を満たすことである. 非対称性 - 推移性 - 3分律(Trichotomy) - は以下の3つのうちのいずれかを満たす. (注:非反射性は非対称性からただちに得られる)

定理:の同値性

厳密で弱い順序の定義における2項関係は同値関係である.即ち以下の条件を満たす. 反射性 の任意の要素に対して . 対称性 の任意の要素に対して . 推移性 の任意の要素に対して . 証明) をの任意の要素とする.の非反射性からは偽である.従ってが成り…

定理:厳密で弱い順序の反対称性

を集合上の厳密で弱い順序とする.このときは反対称性(Assymmetricity)を持つ.即ちをの任意の要素とするとき を満たす. 証明) と仮定する.推移性からただちに が導かれるがこれは非反射性に矛盾する.ゆえに が示された.Q.E.D.

定義:厳密で弱い順序(Strict Weak Order)

集合上の2項関係が厳密で弱い順序であるとは,が以下の条件を全て満たすことである. 非反射性(Irreflexivity) の任意の要素に対して. 推移性(Transitivity) の任意の要素に対して . Equivalenceにおける推移性(Transitivity) 2項関係を と定義する.この…

unique_copy/ unique_copy_ifの入力

あら?本当にまったくどうでも良いけれどunique_copy / unique_copy_ifの入力って標準規格やSGIの記述だとInputIteratorを要求しているけれど,アルゴリズム的にmulti-passなんじゃ・・・? #VC++7.1の実装読んでみたらInputIteratorに対しては一時変数に読…

実体共有型転送関数オブジェクトクラス(仮)

あ,そうか.別にRandom Number Generatorに限らず,pimpl (handle-body idiom)を使った実体(状態)共有のためのファンクタラッパ欲しい状況は結構あるからそ〜ゆ〜汎用転送ファンクタクラスを作ってしまえば良いのだっ!!!作ってみよ. #作った

boost::ramdomの乱数生成器とオブジェクトのコピー

http://d.hatena.ne.jp/halo_w2/20050422#p2 これ前から気になってたんですよねぇ.自分が一番いやだと思う例が mt19937 rng; variate_generator<mt19937, uniform_int<> > rnd(rng, uniform_int<>(-1000,1000)); vector<int> v; list<int> l; generate_n(back_inserter(v), 50, rnd); generat</int></int></mt19937,>…

Associative Vector

以前,Associative Vectorの要素のiterationの速度がstd::set等よりも速いのは,マイナーな利点と書いたけれど http://d.hatena.ne.jp/Cryolite/20050205#p1 この要素のiterationという操作は集合系演算(std::set_union, std::set_intersection, e.t.c.)では…

Alternating Skip List

"Alternating Skip List"ちぅのが"Exceptional C++ Style"で言及されていたので原文を読んでみる. http://www.ddj.com/documents/s=882/ddj0008n/ (全文読むにはregistrationが要ります) 普通のリンクだけじゃなくて1個おき,3個おき,7個おき,・・・のリ…

accumulate

accumulateって関数の適用順序が仕様で定まっているから別にmonoidじゃなくても使えたのね.普通に考えたらmonoidに限定した実装をわざわざする必要はないんだけれど.まぁ,monoid以外にaccumulate使って(゜д゜)ウマーな例なんて自分には思いつかないんだ…

typeof + Boost.Lambda

#include <boost/spirit/typeof/typeof.hpp> // このヘッダはBoostには #include <boost/spirit/typeof/type_encoding.hpp> // 入っていません. #include <boost/spirit/typeof/template_encoding.hpp> // 下を参照. #include <vector> #include <utility> #include <iostream> #include <algorithm> #include <cstdlib> #include </cstdlib></algorithm></iostream></utility></vector></boost/spirit/typeof/template_encoding.hpp></boost/spirit/typeof/type_encoding.hpp></boost/spirit/typeof/typeof.hpp>

typeofエミュレーション

Arkadiy Vertleyb氏のtypeofエミュレーションライブラリをSTLやboost::lambdaと組み合わせて使って遊んでみたけれど,これがまた異常に凶悪だった.癖になりそう・・・.Boostのメーリングリストと実装を追ってみたけれど,このtypeofエミュレーションは意外…

swapについて

swapについて自分が考え・まとめていた問題があったんですが,以下のドキュメントがうまいことまとめてくれていました. http://www.octopull.demon.co.uk/c++/dragons/index.html#box2 ただ,このドキュメントにおける標準委員会の方向性についての部分, 3…

"stl 例外安全 vector push_back"

こんなリファラが.折角だからstd::vector(std:deque)の例外安全性の表でも作ってみましょうかね.本来なら実装依存ですけれど,まぁこの表より例外安全性緩める理由は無いはず(というか自分がstd::vector作るならこうする).std::vectorの例外安全性 valu…

奥が深い症候群 in STL

STL(に限らず多くのコード)の実装の中には「一見自由度があるように見えて実はそれしかない」って感じの部分があって,その真意を理解するとついついうれしくなるんですけれどこういうのって私だけじゃないですよね?何か「奥が深い症候群」とか「バッドノ…

STL lover

私はSTLが好きなんですが「実装の集合としてのSTL」が好きなわけではなかったりします.STLの実装なんてベンダ次第でどうにでもなるものだし,最低限のことをやってくれていればどうでも良いと思っています.もちろん,便利に使わせてもらってはいますが. …

vectorのヤツを読み返してみる

d金魚さんからトラバをもらっていたので少し自分の過去の日記を読み返してみました. id:Cryolite:20040716やid:Cryolite:20040717ですが,今読み返してみると結局書き散らかしているだけで要領を得ない文章になっているなぁと思いました.反省しきりです. …

give me a const iterator

http://lists.boost.org/MailArchives/boost/msg71266.php (boost.devel 2004/09/15~) In the pre-redmond mailing Walter Brown discusses the possibility of adding these members to standard container classes: const_iterator cbegin(); const_iterat…

隣接要素ペアに対するiteration

コンテナの各要素に対するiterationはコンテナの基本的な操作だけれど,一方で各隣接要素のペアに対するiterationっていうのにも良く出くわす.で,これの書き方は色々あるだろうけれど,いざ自分で書く段になって「どういう風に書くのが簡潔かつ綺麗なのか…

STLにおけるコンテナコンセプト階層図

下のようなSTLにおけるコンテナコンセプトの階層図みたいなものを見たことがないので自分で描いてみました.っていうか,なんでこういう図描いてないんでしょうかね?このコンセプト階層図個人的にすげー(゜д゜)ウマーだと思っているんですが・・・ぐちゃ…

うおー!誰じゃ, fill(v.begin(), v.end(), val);のつもりで v.resize(v.size(), val);と書いた馬鹿はっ!? って,俺かっ!!俺なのかっ!!そうかっ!!・・・(´・ω・`)ショボーン っていうか,やっぱり夜更かししてコード書くもんじゃないですな.初歩…