トップページ⇒tech
988コメント299KB

Boostを語れゴラァ part5

■ このスレッドは過去ログ倉庫に格納されています
0001BOOTS2007/10/18(木) 08:09:35
語って.はぁと part boost::mpl::int_<5>

過去スレ
part 4 http://pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 http://pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 http://pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 http://pc8.2ch.net/test/read.cgi/tech/1091198276/

■関連サイト■
Boost C++ Libraries
http://www.boost.org/

Boost 翻訳プロジェクト
http://boost.cppll.jp/HEAD/

Let's Boost
http://www.kmonos.net/alang/boost/

boost info
http://shinh.skr.jp/boost/
0702デフォルトの名無しさん2008/03/07(金) 03:06:15
俺の中ではspiritは神
0703デフォルトの名無しさん2008/03/07(金) 03:09:29
神というか一生かかっても俺には作れない自信がある
0704デフォルトの名無しさん2008/03/07(金) 04:50:33
俺なんか使うだけでも一苦労・・・
0705デフォルトの名無しさん2008/03/07(金) 06:48:40
初めてspirit使った時は文字通り感動した
地獄の構文解析がこんな簡単に…
0706デフォルトの名無しさん2008/03/07(金) 08:04:54
>>702
PCの時代で本当によかった、これがCPUタイム課金時代だったら涙目
0707デフォルトの名無しさん2008/03/07(金) 10:00:23
その時代にあんな変態じみた expression template を受け付けるコンパイラはなかろうよ
0708デフォルトの名無しさん2008/03/07(金) 11:01:24
xpressive ってこの一カ月くらい更新激しいね.
0709デフォルトの名無しさん2008/03/07(金) 23:18:56
spirit大変すぎるだろ。
lemonとか使ったほうがずっと簡単。
0710デフォルトの名無しさん2008/03/07(金) 23:55:09
boostの各ライブラリのthread safetyについてまとまった文書とかない?
マルチスレッド環境でboost::random使いたいんだけど、
スレッドごとに用意するべきなのかな。
0711デフォルトの名無しさん2008/03/08(土) 08:53:33
>>707
LISP(大文字w)のマクロで同じことやった人ならいるかも。
0712デフォルトの名無しさん2008/03/08(土) 12:07:23
Common Lispのloopマクロは、2,30年前だと考えるとちょっと狂ってるね。
Templateは元々Cの変態記号的な演算子をオーバーロードできるから、
Common Lispだとread tableまで駆使しているのに相当するけど。
0713デフォルトの名無しさん2008/03/09(日) 16:30:55
正規表現ライブラリなどは boost を便利に使わせてもらってます。
ところで boost python をインストールするためには何を
準備しておかなければならないのでしょうか?
Linux だと apt-get とか yum でサクッと入るのでしょうけど、
Windows だとそもそも python 処理系をあらかじめ入れておかねば
ならんのでしょうか?当たり前だろ!といわれるかもしれませんが、
Windows での python 処理系って cygwin のやつしか使ったことが
ないもんで・・・
0714デフォルトの名無しさん2008/03/09(日) 16:44:24
当たり前だろ!
0715デフォルトの名無しさん2008/03/09(日) 16:50:57
>>714
おれも書こうとしたが、真剣に質問してたら悪いなと思って自重したんだ。
0716デフォルトの名無しさん2008/03/09(日) 16:56:26
すまん!真剣だったんだが・・・
ActivePython とか日本のユーザー会のPythonとかもあって、
boost.python ビルドするのに相性のいいのはどれよ、
てかもしかしてヘッダだけでいいんかね?
ってことを聞きたかったんだ!
0717デフォルトの名無しさん2008/03/09(日) 20:55:18
>>716
日本のではなく本家のサイトがおすすめ
0718デフォルトの名無しさん2008/03/10(月) 15:22:20
cmakeでFindBoostすれば自動でインクルードパスみっけてくれるから
0719デフォルトの名無しさん2008/03/10(月) 15:24:49
今ならそれこそLua使ったほうがいんでね?好みの問題か。
boost本家ではないがboost使ったluabindってのがある
0720デフォルトの名無しさん2008/03/10(月) 15:30:23
おまいらのレベルになると、q2chwmをビルドするのも楽勝なんでしょ?
0721デフォルトの名無しさん2008/03/12(水) 01:05:49
何それ?
0722デフォルトの名無しさん2008/03/12(水) 01:22:04
WM用の2ちゃんねるブラウザです。
q2chというりなざう用ブラウザの派生版
0723デフォルトの名無しさん2008/03/12(水) 11:20:24
なんでそれをここで
0724デフォルトの名無しさん2008/03/12(水) 12:33:03
向こうでも言ったけど、凄腕だらけだと判断したから
0725デフォルトの名無しさん2008/03/12(水) 12:47:28
WMと言われてもlightweight_mutex.hppくらいしか思いつかん

0726デフォルトの名無しさん2008/03/12(水) 12:51:00
まぁ結論だけ言うとスレ違い死ねよってとこかな。
0727デフォルトの名無しさん2008/03/12(水) 12:55:59
そんなこといわないで
0728デフォルトの名無しさん2008/03/12(水) 13:05:44
そもそも何が難しいのか理解できん
SSL周りで必要なファイルが多いだけでは
0729デフォルトの名無しさん2008/03/12(水) 16:04:14
http://d.hatena.ne.jp/niitsuma/20080311
cmakeの日本語解説がなかったので作りました
0730デフォルトの名無しさん2008/03/12(水) 16:31:02
新妻さんありがとう
0731デフォルトの名無しさん2008/03/12(水) 19:54:41
でも死ね
0732デフォルトの名無しさん2008/03/13(木) 00:38:58
便利そうだね,新妻さんありがとう

でも宣伝乙
0733デフォルトの名無しさん2008/03/13(木) 04:43:04
新妻・・・ハァハァ
0734デフォルトの名無しさん2008/03/13(木) 06:00:10
オマンコがオマンコを呼ぶ怒涛の展開
0735デフォルトの名無しさん2008/03/13(木) 06:00:24
間違えた orz
0736デフォルトの名無しさん2008/03/13(木) 08:11:04
おまいはガチで面白い
0737デフォルトの名無しさん2008/03/13(木) 11:12:10
でも死ね
0738デフォルトの名無しさん2008/03/13(木) 20:36:21
死なばもろとも
0739デフォルトの名無しさん2008/03/14(金) 00:19:50
死なばもろとも…? C++とBoostのことか… C++とBoostのことかーーーっ!!!
0740デフォルトの名無しさん2008/03/14(金) 00:23:06
いえ、valarrayとprogress_displayです
0741デフォルトの名無しさん2008/03/14(金) 01:13:57
あとvector<bool>もだな
0742デフォルトの名無しさん2008/03/14(金) 13:58:53
progress_displayなんて誰かorどっかの著名アプリで使ってるのか?
0743デフォルトの名無しさん2008/03/14(金) 14:54:03
著名アプリで使われることが全てではないだろうて。



だからといってprogress_displayが使えるとかそういう話でもないがな。
0744progress_display2008/03/14(金) 15:25:19
(´;ω;`)ブワッ
0745デフォルトの名無しさん2008/03/14(金) 16:33:23
なんでプログレスバーをそんなに叩くんだよ。
0746デフォルトの名無しさん2008/03/14(金) 17:04:30
boost.pythonって単純な型の変数しか扱わない関数呼び出しをラップしてくれるだけだよね。
決してクラスまで面倒見てくれる訳じゃ無いよね?
0747デフォルトの名無しさん2008/03/14(金) 17:25:57
つ http://www.boost.org/libs/python/doc/tutorial/doc/html/python/exposing.html
0748progress_display2008/03/14(金) 22:21:34
(´;ω;`)おっおっううぇああぁああぅぅおぉぉおお
0749デフォルトの名無しさん2008/03/14(金) 22:24:35
GUIでも使える位汎用性があればまだ使い道があったのに
0750progress_display2008/03/14(金) 22:27:29
(´;ω;`)おっおっううぇああぁああぅぅおぉぉおお
0751デフォルトの名無しさん2008/03/15(土) 14:04:49
今のvector<bool>はいらない子だが
C++0xならコンテナの要件を満たした実装ができそうなうな気がする。
スレ違ったすまん
0752progress_display2008/03/15(土) 14:18:33
( ^,_ゝ^)ニコッ
0753デフォルトの名無しさん2008/03/15(土) 14:26:12
>>751
フサフサはdeque<bool>でいいと言ってるだろ。
0754デフォルトの名無しさん2008/03/15(土) 14:47:15
どっかの外人開発者のブログで「vectorはいらない子、dequeを使おう」っていうデータが出てなかったか?
あらゆるパフォーマンスでvectorよりも平均的に優れているdeque。
0755デフォルトの名無しさん2008/03/15(土) 14:48:49
さすがにそれはないw
0756デフォルトの名無しさん2008/03/15(土) 14:52:09
レガシーAPIとやりとりするのに必要
0757デフォルトの名無しさん2008/03/15(土) 14:58:36
ずっとデキューだと思ってた。
デックと言われたとき軽くショック受けて3日ほど寝込んだわ。
0758デフォルトの名無しさん2008/03/15(土) 14:59:32
>>757
ディーク
0759デフォルトの名無しさん2008/03/15(土) 15:13:47
deckとひっかけて、あえてそう読める綴りにしたんだよね。
でも/dek/と発音しなくちゃいけない決まりは無い
0760デフォルトの名無しさん2008/03/15(土) 22:30:16
>>754
つい先日、どっかのスレにリンク貼られてたね。
でも「あらゆるパフォーマンスで」っていう話ではなく、
「皆が思っている以上にdequeが勝っている項目が多い(から、dequeを軽視するのはやめよう)」
という話だったかと。
0761デフォルトの名無しさん2008/03/15(土) 22:32:46
「とりあえずvector使っとけばいいってもんじゃない」ぐらいの趣旨かと
0762デフォルトの名無しさん2008/03/15(土) 22:34:17
>>760
「要素の連続性保証がいらないならdequeにしとけ〜」じゃなかった?
0763デフォルトの名無しさん2008/03/15(土) 22:34:57
deque は間に挿入しないのであれば
メモリの最確保が起こってもコピーが発生しないからな。
あれは凄い利点だと思う。
0764デフォルトの名無しさん2008/03/15(土) 22:47:11
ギャップ付きベクタを一般化したような感じだよな
0765デフォルトの名無しさん2008/03/15(土) 22:47:52
Stackなどの補助コンテナはデフォルトでdequeを使ってるという事実。
0766デフォルトの名無しさん2008/03/15(土) 22:59:45
そりゃそうだろ
両端キューなんだからスタック・キューの実装に不向きなわけが無い
0767デフォルトの名無しさん2008/03/15(土) 23:03:27
まあオーバースペック感はあるが。
0768デフォルトの名無しさん2008/03/15(土) 23:10:40
>>766
ウフフフ
0769デフォルトの名無しさん2008/03/15(土) 23:10:56
dequeはランダムアクセスに弱いし、
vectorに比べるとメモリ効率も悪い。

>>763
間に挿入してもコピーは発生しない。
0770デフォルトの名無しさん2008/03/15(土) 23:15:43
>>769
間に挿入してコピー発生しなかったらそれはリストなんだぜ。
deque の挿入で O(1) なのは両端の挿入だけ。
0771デフォルトの名無しさん2008/03/15(土) 23:23:19
間に挿入してもコピーが発生しないようなdequeは書こうと思えば書けるのでは?
0772デフォルトの名無しさん2008/03/15(土) 23:26:54
>753
横浜優勝スレの人?

>757
P.J.Plaugerさんによると、デックかディーキュー(ディーイーキュー)と読めだそうな。
0773デフォルトの名無しさん2008/03/15(土) 23:28:14
>>771
ランダムアクセスがかなり複雑になりそうな・・・。
0774デフォルトの名無しさん2008/03/15(土) 23:30:52
ランダムアクセスと途中への挿入・削除を高速にしたい場合はどのコンテナを使ったらいいですか?
0775デフォルトの名無しさん2008/03/15(土) 23:34:17
木構造を使えば全操作を O(log N) で行えるようにはできる。
0776デフォルトの名無しさん2008/03/15(土) 23:35:00
裏を返せば、O(1) でできる操作がないってことだが。
まあ、サイズ取得くらいは O(1) で可能だけども。
0777デフォルトの名無しさん2008/03/16(日) 00:07:32
>>774
map
0778デフォルトの名無しさん2008/03/16(日) 00:08:36
std::map の operator[] はランダムアクセスとはちょっと違うよな・・・。
0779デフォルトの名無しさん2008/03/16(日) 01:08:38
Boost 1.34.1のuBlasを使っています。
matrixの要素をすべて列挙したいのですがどのようにすればいいですか?
できるだけシンプルな方法が知りたいです。
0780デフォルトの名無しさん2008/03/16(日) 02:04:47
>>754
1つ前のSTLスレにあった。
http://www.codeproject.com/KB/stl/vector_vs_deque.aspx
0781デフォルトの名無しさん2008/03/16(日) 02:22:51
>>779
ublas::matrix<T> m;

for (std::size_t i = 0; i < m.size1(); ++i) {
    for (std::size_t j = 0; j < m.size2(); ++j) {
        m(i, j);
    }
}
0782デフォルトの名無しさん2008/03/16(日) 02:28:42
ありがとうございます。
やはりインデックスを使わないと無理でしょうか。

述語Pの成り立つ要素をカウントしたくて

int c = std::count_if( [first, last] , P);

みたく1行で書きたかったのですが。
07837822008/03/16(日) 02:30:40
[first, last]
じゃなくて
[first, last)
です。すみません
0784デフォルトの名無しさん2008/03/16(日) 02:48:48
イテレータを作ればいじゃない
0785デフォルトの名無しさん2008/03/16(日) 03:37:48
ありがとうございます。
イテレータを作ってみたら結果的には長くなってしまいましたが望み通り動きになりました。
0786デフォルトの名無しさん2008/03/16(日) 08:21:41
>>769
間に挿入してもコピーは発生しない。

規格では、こんなこと言ってない。どこに挿入しようが
メモリのreallocationは起こりうるというふうに考えて
おかないといけない。
0787デフォルトの名無しさん2008/03/16(日) 10:24:54
dequeのランダムアクセス (operator[]() とか at() とか) は
定数時間だったと記憶していたが、俺の記憶違いか?
0788デフォルトの名無しさん2008/03/16(日) 10:27:19
dequeのランダムアクセスはO(1)じゃないなんて意見はでてないよ?
0789デフォルトの名無しさん2008/03/16(日) 10:30:54
std::dequeはそうだね。

dequeはdouble ended queueのことだから、
deque一般には成立しない。
0790デフォルトの名無しさん2008/03/16(日) 10:32:54
>>788
>>769 とか。

>>789
ここまでの deque の話って std::deque の話じゃなかったの?
07917882008/03/16(日) 10:34:28
あ、ほんとだ
すまんこ
0792デフォルトの名無しさん2008/03/16(日) 10:35:06
俺もstd::dequeの話だと思ってた
0793デフォルトの名無しさん2008/03/16(日) 10:38:33
C++だとlistが、
double linked listで実装されたdequeにそのまま使えるから、
dequeの別の実装はないだろうね。

Javaはdequeはinterfaceで、
list版とarray版の両方の実装がある。
0794デフォルトの名無しさん2008/03/16(日) 11:41:32
テキストエディタ作ってるんだけど、行管理クラスは各行へのランダムアクセスと
途中への挿入・削除処理の高速性が要求される

std::deque はその両方の要求を満たしてるの?
0795デフォルトの名無しさん2008/03/16(日) 11:57:57
>>794
途中への挿入・削除はノードベースコンテナ(std::list std::setなど)よりは遅い。
ランダムアクセスは、一般的にメモリの構造上vectorよりはアクセス速度は落ちる。
でも実害ないなら無視すればよろし。
0796デフォルトの名無しさん2008/03/16(日) 12:16:09
各行へのランダムアクセスって、どういうときに使われるの?
いきなり500行目にジャンプ!とかってあんましないような。
頻繁に行われるであろう検索・置換もシーケンシャルだし。
0797デフォルトの名無しさん2008/03/16(日) 12:21:26
行数指定してジャンプは良く使わないか?
コンパイルエラーを直すときとか
0798デフォルトの名無しさん2008/03/16(日) 12:29:50
たしかにコンパイルエラー直すときは重宝するけど他にもあるかな?
std::deque を使うとランダムアクセスは定数時間だけど、削除とかは線形時間。
例えば1万行のテキストの空行を全て削除、とかいう操作をやるともっさりしそう。(最悪で1万の2乗くらいのオーダー)
std::list の方がいいのでは。
0799デフォルトの名無しさん2008/03/16(日) 12:30:49
テキストエディタは、
・行指向エディタだと、行のダブル・リンクト・リスト
・ギャップ・バッファ
が古典的だね。

>>797
ギャップ・バッファ方式(e.g. Emacs)でもそんな遅くないでしょ。
こっちの方が改行コードを含めた正規表現検索とかやりやすいし。
0800デフォルトの名無しさん2008/03/16(日) 13:24:03
STLコンテナの要件を満たすギャップバッファ式コンテナを作ったことがあったが
なかなかいい勉強になった。
0801デフォルトの名無しさん2008/03/16(日) 14:19:07
うp
■ このスレッドは過去ログ倉庫に格納されています