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

Boostを語れゴラァ part5

レス数が900を超えています。1000を超えると表示できなくなるよ。
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/
0802デフォルトの名無しさん2008/03/16(日) 14:48:32
検索するといくつかあるね
ていうかboost関係ないな
0803デフォルトの名無しさん2008/03/16(日) 14:57:26
Boostにもあればいいって話かな
0804デフォルトの名無しさん2008/03/16(日) 15:02:59
>>800
俺も以前ショボイながら作ったけど、ギャップバッファの実装そのものより、
STLコンテナの要件を満たす条件を調べるのに費やした時間の方が長かったという・・・
0805デフォルトの名無しさん2008/03/16(日) 15:07:35
既存のvectorとかdequeにあわせbト戻り値やら関瑞狽竄迯�黷ホ
とりあえず問題なくね?
0806デフォルトの名無しさん2008/03/16(日) 15:33:11
ContainerConceptが通れば問題ないよ
0807デフォルトの名無しさん2008/03/16(日) 17:26:46
>>786
メモリの reallocation とコピーは別問題だよ。

>>790
deque のランダムアクセスは O(M) (M は内部バッファの分割数)。
O(N) よりははるかにマシだが、O(1) ではない。
0808デフォルトの名無しさん2008/03/16(日) 17:29:10
>>807
何見てしゃべってんの?規格じゃないよね?
0809デフォルトの名無しさん2008/03/16(日) 17:31:12
規格じゃない。
具体的に実装すると大抵の場合そうなっちゃうという話。
0810デフォルトの名無しさん2008/03/16(日) 17:36:32
つまり特定の実装に依存する話なわけだ。

途中への挿入で複数要素のコピーが発生する実装も、
ランダムアクセスが O(1) な実装も、規格の範囲で在りうるんだから、
何の前提も書かずに言い切らないでほしい。
0811デフォルトの名無しさん2008/03/16(日) 17:38:19
>>807
別問題じゃないよ。
std::dequeは、挿入・削除は対象以外の全てのリファレンス、ポインタ、イテレーター
を無効にする。リファレンスとポインタは先頭、末尾挿入の場合は有効のまま。
Josuttis本にはこう書いてある。
ということは、reallocationによって要素は移動されることもあるというわけでしょ。
これは初期化あるいは代入は発生しうると考えておくべきということ。
Josuttis本が間違いなら知らん。
0812デフォルトの名無しさん2008/03/16(日) 17:38:48
配列をvectorに変えたら、コンパイラがsseを使わなくなったのだけど
vectorってsse使ってくれないの?
FC8+Intel v10です。
0813デフォルトの名無しさん2008/03/16(日) 17:39:34
安全を考えると当然規格には従っておくべき。
0814デフォルトの名無しさん2008/03/16(日) 17:40:20
スレ違いな話が続いたせいで迷子がでたようだ。
0815デフォルトの名無しさん2008/03/16(日) 17:40:23
>>811
挿入・削除されたから無効になるんだろ。
reallocation が起こらなくても無効になるんだから、
reallocation とは無関係。
0816デフォルトの名無しさん2008/03/16(日) 17:40:25
分かった分かった。
お前はO(N)なソートでも使ってろ。
0817デフォルトの名無しさん2008/03/16(日) 17:42:28
>>807,809
deque のランダムアクセスは償却定数時間じゃないと規格の要件を満たさない。
「内部バッファの分割数」ってのがはっきりしないけど、「O(1) ではない」と言い切れて
しまうような実装は deque とは言えないんじゃないの?
0818デフォルトの名無しさん2008/03/16(日) 17:44:53
>>815
挿入もしないのに勝手にreallocationされんの?
新しい要素のために領域が必要だからreallocationされるんじゃないの?
0819デフォルトの名無しさん2008/03/16(日) 17:45:14
ランダムアクセスが償却定数ってどういうこと?
規格には定数って書いてあるよ
0820デフォルトの名無しさん2008/03/16(日) 17:49:23
>>815
shrinkはされる可能性はあるが、reallocationは必要になったときのみだ。それは
必要な領域拡張のとき。要素の挿入もその可能性は常にある。だから関係はある。
0821デフォルトの名無しさん2008/03/16(日) 17:49:38
>>817
ああ、よく考えたら定数で実装できそうだな。
0822デフォルトの名無しさん2008/03/16(日) 17:49:42
>>819
あれ?そうなの?
"Table 68 - Optional sequence operations" に載ってて、こいつらみんなまとめて
償却定数時間だから、 deque の operator [] もそうだと思ったんだけど。
別のところに書いてあるのか?
0823デフォルトの名無しさん2008/03/16(日) 17:52:04
長くなりそうなら、いいかげんにスレ移動してくれ。
0824デフォルトの名無しさん2008/03/16(日) 17:57:54
>>822
ごめん、俺の勘違い
0825デフォルトの名無しさん2008/03/16(日) 18:02:03
厳密には
先頭と最後の要素へのアクセス速度は同じ。
それ以外には間接レベルが違うから差異があるよ。
Big O記法はよく知らんが、少なくともlogやn^2ではない。
Data Structure AND Algorithm In C++が分かりやすい。
0826デフォルトの名無しさん2008/03/16(日) 18:08:17
この辺で語った方がみんなのためにもなると思うんだ

【C++】STL(Standard Template Library)相談室 9
http://pc11.2ch.net/test/read.cgi/tech/1204045410/
0827デフォルトの名無しさん2008/03/16(日) 18:08:56
>>818
>>>815
端への追加は O(1) で行わないといけないので、
端への追加でメモリを最確保する必要があったとしても、
それまでのデータを新しいメモリにコピーするようなことは行えない。
データの全コピーは O(N) だから。
この場合、メモリの最確保が行われるが、コピーは発生しない。でしょ?
0828デフォルトの名無しさん2008/03/16(日) 18:11:37
> 最確保 の検索結果 約 183 件...
0829デフォルトの名無しさん2008/03/16(日) 18:15:09
>>827
端はわかるけど、中間への挿入はどう考えればよい?
コピーが発生しないなら、挿入時に挿入要素以外の全イテレータは無効になる理由が
わからん。
0830デフォルトの名無しさん2008/03/16(日) 18:17:26
>>829 >>826
0831デフォルトの名無しさん2008/03/16(日) 18:21:44
このカスどもはスレチな話をいつまで続ける気なんだ
0832デフォルトの名無しさん2008/03/16(日) 18:22:58
>>829
中間への挿入はコピーが発生するに決まってるだろ。
0833デフォルトの名無しさん2008/03/16(日) 18:23:26
てか、そんな神経質にならずに先ずは規格で言われてるように
使えばいいだろ。たいがい問題ない。

考えて見ればBoostスレじゃないか。おしまい。
0834デフォルトの名無しさん2008/03/16(日) 18:24:39
>>832
でしょ。そのときは新しいメモリの割り当てもあり得るじゃん。
ウヒヒ。
0835デフォルトの名無しさん2008/03/16(日) 18:25:45
>>834
内部で確保しておいたバッファを越えていなければ
メモリの割当は起きないだろ。
0836デフォルトの名無しさん2008/03/16(日) 18:26:41
>>834-835 >>826
0837デフォルトの名無しさん2008/03/16(日) 18:27:42
要するに、reallocation に原因があるのか
それともコピーに原因があるのか、
それが分かっていない、とそう言ってる。
イテレータが失効するのはコピーが発生する可能性があるから。
reallocation がその時たまたま起こるかもしれないが、それは直接の原因じゃない。
0838デフォルトの名無しさん2008/03/16(日) 18:47:22
ところで progress_display なんだが
0839デフォルトの名無しさん2008/03/16(日) 18:54:59
断る
0840デフォルトの名無しさん2008/03/16(日) 19:03:31
>>835
よく読んでね。
あり得るって書いてるでしょ。
0841デフォルトの名無しさん2008/03/16(日) 19:28:40
【C++】STL(Standard Template Library)相談室 9
http://pc11.2ch.net/test/read.cgi/tech/1204045410/
0842デフォルトの名無しさん2008/03/16(日) 19:59:28
>>838-839
カワイソス
0843デフォルトの名無しさん2008/03/16(日) 19:59:36
>>840
100% 起こることではないってことだろ?
だからこその >>837 だ。
0844デフォルトの名無しさん2008/03/16(日) 20:45:32
boost::mutex てヘッダだけで完結しないんだな。
ライブラリをリンクするのめんどくさいし+デカくなるんだが。
0845デフォルトの名無しさん2008/03/16(日) 22:08:13
Boost関係ないけど、C++の規格ってみんな何を参照してるんですか?
0846デフォルトの名無しさん2008/03/16(日) 22:10:15
JIS のサイトでタダで見れる。
0847デフォルトの名無しさん2008/03/16(日) 22:15:16
ANSI。安いし。
0848デフォルトの名無しさん2008/03/16(日) 22:28:18
つーかJISが自由に見れないってどうなのよ
ああいうものこそフリー・オープンであるべきなのに
0849デフォルトの名無しさん2008/03/16(日) 22:33:31
維持には金がかかるんだよ! ってことだろう。
まあ、ネット上で見る分にはタダだから俺は気にはしてないが。

それよりも、金払って買っても
C の規格書とか画像データの PDF で検索できないとかいう話らしい点は
どうかと思う。
0850デフォルトの名無しさん2008/03/16(日) 22:39:54
なんでこうスレ違いな話をここでやるんだ?
0851デフォルトの名無しさん2008/03/16(日) 23:26:25
うっかり盛り上がってしまったから。
いいじゃないか、たまには。
0852デフォルトの名無しさん2008/03/16(日) 23:33:06
ダメ。
2度も3度も誘導されておいて、移動しないのはアホ。
ふさわしい場で議論をしようという気がない腑抜け。
0853デフォルトの名無しさん2008/03/17(月) 00:10:35
そんな議論なんてまじめなことやる気がないのは
移動しないあたりからよくわかる。
ちょっとおいたのすぎた雑談だよ。
0854デフォルトの名無しさん2008/03/17(月) 02:46:47
ラベルも低いしな。
0855デフォルトの名無しさん2008/03/17(月) 05:01:12
別に良いじゃん
0856デフォルトの名無しさん2008/03/17(月) 05:02:05
っていうかなんでこの板はIDないの?
0857デフォルトの名無しさん2008/03/19(水) 11:39:07
vc8, vc9 で boost.test のビルドに失敗するようになってしまったんだけど,
なんか心当たりある?最近までビルドできていたので boost.test まわりで
最近何か変化があったか見てみたんだけど何もなかった.とりあえず

bjam --builddir=builddir-vc9 --build-type=complete
--toolset=msvc-9.0 --without-test stage 1>..\build.log

みたいにして --without-test してビルドしてるけど,気持ち悪い.
0858デフォルトの名無しさん2008/03/19(水) 11:48:26
bjam --builddir=builddir-vc9 --build-type=minimal
--toolset=msvc-9.0 1>..\build.log

ちなみにこんな風に --build-type=minimal (つまりデフォルト)
だとビルドできる.なんかターゲットが重複しているとか・・
正確なエラーメッセージを後で貼ります.
08598572008/03/19(水) 11:55:12
boost-build/build\virtual-target.jam:976:
in virtual-target.register-actual-name from module virtual-target
error: Duplicate name of actual target

なので,

http://lists.boost.org/boost-build/2007/02/16143.php

と同じような感じ.
08608572008/03/19(水) 11:57:05
I'm getting "Duplicate name of actual target" error. What does it mean?
http://www.boost.org/boost-build2/doc/html/bbv2/faq/s02.html
これか?これなのか?
0861デフォルトの名無しさん2008/03/19(水) 12:40:59
progress_displayでコレが簡単に作れるなら使ってもいいかもしれない

    _, ._
  ( ・ω・) now shibakaring ...
  ○={=}〇,
   |:::::::::\, ', ´
、、、、し 、、、(((.@)WWWWWWWWWWWWWWWWWWWWWWW (26%)
0862デフォルトの名無しさん2008/03/19(水) 12:43:00
cursesでも使っとけ
08638572008/03/19(水) 12:59:28
bjam がこんなエラーを吐きます.一応載せておきます.
http://pastebin.windy.cx/?page=view&id=1205899359
libboost_test_exec_monitor-vc90-mt-gd-1_35.lib
をビルドするにあたってvirtual targetが重複している
ってことらしいんだけど・・
08648572008/03/19(水) 14:27:50
VERSION_1_35_0_RC1 ならすんなりビルドできるような気がする。
いままで trunk でもとらぶったこと無かったから
RC のタグが打たれてたことに気づかなかった。
0865デフォルトの名無しさん2008/03/19(水) 18:35:55
boostのrandomのライブラリでカイ二乗分布に従う確率変数を生成できますか?

08668652008/03/19(水) 19:52:19
boostじゃないけど、ググってたら見つけられました。
08678572008/03/19(水) 19:53:06
1.35 RC1 for VC8, VC9 バイナリ
http://svn.windy.cx/index.php?boost
0868デフォルトの名無しさん2008/03/19(水) 21:42:14
>>856
IDがあったところでプログラミング自体に有益な議論にはならないからだろ。
理数系板はID無し多いね。
0869デフォルトの名無しさん2008/03/19(水) 21:46:14
リアルタイムで回答する場合、
質問者がだれか分かりやすいから
ID 欲しいというときはある。
0870デフォルトの名無しさん2008/03/19(水) 23:12:57
>>861
/.Jでこんなん見っけた。オススメ。
ttp://www.blue.sky.or.jp/grass/doc_ja.html
0871デフォルトの名無しさん2008/03/19(水) 23:25:10
刈りたいのに生やしたら駄目だろ
0872デフォルトの名無しさん2008/03/20(木) 07:09:37
>>870
GJ
0873デフォルトの名無しさん2008/03/20(木) 09:28:01
boostのおかげで自作のプログラムのマクロ機能は
Pythonで実現することに決定しました。
0874デフォルトの名無しさん2008/03/20(木) 17:45:05
質問です。
Visual Studio 2005を用いて
プロジェクトの種類を「CLR」、「Windows フォームアプリケーション」
として新規作成したフォームにボタンを一つ設置し、以下のソースを記述し、

vector<wstring> vec;
vec.push_back(L"Hello");
double pi = 3;
wofstream file(L"save.txt");
text_woarchive oa(file);
oa << (const vector<wstring>& ) vec;
oa << pi;

実行したところ、
oa << (const vector<wstring>& ) vec;
の箇所で

「Debug Assertion Failed!
Program:c\Documents and Settings\unchi65sai\archivetest\Debug\archivetest.exe
File: dbgheap.c
Line: 1473
Expression: _CrtIsVaildHeapPointer(pUserData) 」

とダイアログが表示されて停止してしまいます。
ちなみに、
oa << (const vector<wstring>& ) vec;
の部分をコメント化すると、正常に処理が行われ、テキストファイルが生成されます。

この現象は、プロジェクトのプロパティを何か変更することで回避できるのでしょうか?
あるいは、CLRでは、 stringの書き出しできないものなのでしょうか?
よろしくお願いします。
0875デフォルトの名無しさん2008/03/20(木) 17:52:50
スレ違い
0876デフォルトの名無しさん2008/03/20(木) 18:20:08
>>874
C++/CLIでunmanagedなコードを混在させてboostを使うとそうなる。
アプリケーションのエントリポイントを次のようにすると直ると思う。
?mainCRTStartupStrArray@@$$FYMHP$01AP$AAVString@System@@@Z

ちなみにこの問題はVS2008では直っているらしい。
08778742008/03/20(木) 19:17:41
>>876
プロジェクトのプロパティを開き、
「構成プロパティ」→「リンカ」→「詳細」→「エントリポイント」
の設定を変更したところ、正常に機能するようになりました。
情報をありがとうございました。
0878デフォルトの名無しさん2008/03/21(金) 13:56:04
Windows で boost python を使ったアプリケーションを書いています。
配布に際して boost python 自身の DLL は一緒に配布しなければ
ならないのは当然として、Python バイナリパッケージ由来のファイル
も何か配布しなければならないのでしょうか?
08798782008/03/21(金) 14:00:43
Dependency Walker で調べてみたら、
C:\WINDOWS\system32\python25.dll
も必要なようです。

しかし!驚愕の事実!
python25.dll 自体が Visual C++ 7.1 のランタイムを要求している!
自分は Visual C++ 8 を使っているのです。異なるバージョンの
ランタイムを要求する DLL たちをあわせて使っていいのかなぁ。
今までもサードパーティのライブラリをそういうこと気にせず
使ってたけど、動いていたし、まぁいいか。いいことにします。
作ってるアプリも売り物じゃないし。
0880デフォルトの名無しさん2008/03/21(金) 15:21:48
ところで POCO 使ってる人いる?
0881デフォルトの名無しさん2008/03/21(金) 20:38:36
Plain Old C Object?
0882デフォルトの名無しさん2008/03/21(金) 23:15:47
プログラムがバグって動かなかったけど、なんとなくポインタを shared_ptr に変えてみたら動くようになった
好きになったぜ>ぶーすと
0883デフォルトの名無しさん2008/03/22(土) 00:13:10
>>880-881 これだろう
POCO (C++ Portable Components, http://pocoproject.org/)
0884デフォルトの名無しさん2008/03/22(土) 00:49:54
>>879
DLLというのはもともと、DLLを使う側に依存しないようになってるので、
DLL「A」とDLL「B」が違うランタイムを使っていてもぜんぜんOKです。
今回は例外として、普通はアプリからどのランタイムを使っているのかなんて分からないし、
気にするべきでもないと思います。
(考慮すべきことはマルチスレッドに対応してるかどうかくらい)

ランタイムが違えば、必要なDLLが増えるということはあるけど、
ランタイムが違うことで動かなくなることは多分無いです。
もし動かなかったら、それは別の問題が発生している可能性高し。

> Python バイナリパッケージ由来のファイル
> も何か配布しなければならないのでしょうか?
Pythonがインストールされている環境を前提にするならば配布する必要は無いです。
そうでないなら配布する必要があります。
0885デフォルトの名無しさん2008/03/22(土) 10:06:27
>>884
ふむ、そうなのか。ミューテックスとかは
OSで管理するものだから問題ないんだな。
でもマルチスレッド考えるとなんか副作用が
ありそうなんで、暇なときに調べてみる
0886デフォルトの名無しさん2008/03/22(土) 10:33:00
OSのAPIとCの標準ライブラリが分離されてるWindowsには好感が持てる
0887デフォルトの名無しさん2008/03/22(土) 10:38:15
APIは分離しているけど 実装はMSVCRT.DLLなどに依存しているがね
0888デフォルトの名無しさん2008/03/22(土) 20:13:27
std::sort(v.begin(), v.end(), _1->Func() > _2->Func());
みたいなことをlambdaやbindを使ってやる方法ありますか?
0889デフォルトの名無しさん2008/03/22(土) 20:23:24
std::for_each( vec.begin(), vec.end(),
 if_( _1 % 2 == 0 )[
  cout << _1 << "は偶数\n"
  ].else_[
  cout << _1 << "は奇数\n"
 ]
);

こんな感じで書けます。
出典 ttp://www.kmonos.net/alang/boost/classes/lambda.html
0890デフォルトの名無しさん2008/03/22(土) 20:25:23
ごめん忘れて、よく見てなかった...
0891デフォルトの名無しさん2008/03/22(土) 20:26:47
こういうこと?

std::sort(v.begin(), v.end(), bind(&Class::Func, _1) > bind(&Class::Func, _2));
08928882008/03/23(日) 01:31:52
>>891
thx
うまくいきました。
0893オガちゃん萌え ◆tyvkWCNtzY 2008/03/23(日) 21:04:51
>>885
OSうんぬんより、mutexは別スレッドからlock/unlock期間中のアクセスを待機させるから安全か
どうかとえば、使用は慎重を期するよ
別プロセスは関係ないが…
共有メモリやらメモリマップドファイルは別だけど
セマフォ、ミューテックスの使用は本当に必要であるかを加味した方が良さそうに思う
boost::thread::mutex(だっけ?) はでも便利だね
スコープから抜ければ勝手にデストラクタがunlockしてくれるのも楽でよい
自作してもauto変数なら当然かも試練、スマソw

>>886
悪の枢軸たるWindowsもそう考えると良いとこあるのかね
でもさ、結局printfなんかもさMSVCRT.dllなんかがラップしてんだよね
メイクファイルでビルドしようとしてリンクエラーで苦戦したことがよくあったなあ

>>888
>>891が答え書いてるけど、bindは便利だよな!
0894デフォルトの名無しさん2008/03/23(日) 22:06:13
STLスレでもやってたけど、ここはお前の雑談スレじゃないんだよ?
0895デフォルトの名無しさん2008/03/23(日) 22:11:55
410 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/22(土) 20:51:00
なんで雑談してんの?

411 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/22(土) 23:17:29
相談が無いからだろう

相談できる雰囲気でもないがね

412 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/23(日) 00:44:28
何で雑談しているのかを聞く それも雑談なんじゃね?
自分の胸に聞くのがはえーんじゃね?

415 名前:オガちゃん萌え ◆tyvkWCNtzY [sage] 投稿日:2008/03/23(日) 20:37:34
>>410-412
まぁ固いこと言わないでマターリやろうよ

こんな事書く人間に何を言っても無駄かと
NGが得策
0896オガちゃん萌え ◆tyvkWCNtzY 2008/03/23(日) 22:25:51
>>894-895
スレ違いってほど外れた話題はしてないつもりだが?
俺叩く暇あるなら、なんかboostについて書いてくれ
0897デフォルトの名無しさん2008/03/23(日) 22:31:18
なんていうかもう糞コテ氏ねとしか
0898デフォルトの名無しさん2008/03/23(日) 22:39:32
boostはもう無しで生きていけないけど、テンプレート使い過ぎて
時々コンパイラが音を上げるのが困る
0899オガちゃん萌え ◆tyvkWCNtzY 2008/03/23(日) 23:42:11
>>898
STLスレで誰か書いていたが、EffectiveSTLにSTLのエラーは読むなってのがあって、実際に本棚に
埋もれたEffectiveSTL読んだらconstキャスト忘れとかのエラーを理解しろみたいなのが書いてあったよ
SingletonとAbstractFactoryパターンをよく使うんだが、AbstractFactoryをテンプレートにして
中にmap<int, string>かなんかやったときにwarningが出まくったことあったw
それこそ、この内容はSTLか。
boost一番よく使うのはツールだな
tokenizer、regex、bindなんかはもう無しじゃ生きていけない
0900デフォルトの名無しさん2008/03/24(月) 00:33:17
C++から基底クラスを公開してPythonでクラスを継承して実装、
C++からその実装されたクラスをnewしてPythonに渡す。
といったような事がやりたいんですが、boost.pythonで出来ますか?

参考書籍、およびサイトなども教えてもらえたらありがたいです。
0901デフォルトの名無しさん2008/03/24(月) 07:41:37
できたらすごいな。
俺はPython使い始めたばっかりで一方向の使い方しかしてないけど興味ある。
できたら教えて欲しいな。
レス数が900を超えています。1000を超えると表示できなくなるよ。