- 1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ]
- C++標準ライブラリの一つ、STLについて。
前スレ 【C++】STL(Standard Template Library)相談室 8 pc11.2ch.net/test/read.cgi/tech/1198435319/ 過去ログ・リンク・書籍紹介は >>2 以降
- 357 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:19:10 ]
- 自作関数オブジェクトをアルゴリズムに適用するときとかね
- 358 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:29:42 ]
- >>356
constの有無程度なら「constがある/ない」で警告してくれればいいんだけど、型を変換できないと言われてtypedefしてない型を延々出されると何事かと思う。 もう慣れたけど。
- 359 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:57:09 ]
- STLの内部で使ってるの型を吐き出してくれるから、
VS付属→STLPortとか実装を取り替えると同じエラーでもメッセージがぜんぜん違ってくれる素晴らしい罠。
- 360 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 14:02:01 ]
- さてconceptはまだですか?
- 361 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:42:46 ]
- boostを盲進、過信するのはやや問題があるとは思う
特に納品物というか成果物としては。いくらboostのライセンスが軽いとはいえ。 boostの一部がTRで採用されて0xに反映されたら標準ライブラリとみなせるだろうけど… いっぽうで、ツール類作るときは積極的に使用する。 tokenizerとかregexとか、bindなんか使うとやみつきになる その点、STLはまずコンパイル・リンクエラーなってる場合はほぼ間違いなく自分のコードに問題あり もしくは、VC++とかBorlandC++とかそういうコンパイラ でも、テンプレートが展開されたエラーは原因を見つけるのに慣れないと苦労するのも確か。
- 362 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:53:02 ]
- >>361 は標準ライブラリを盲信、過信していると思う。
- 363 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:54:40 ]
- と凡人プログラマが申しております。彼は自分のプログラミング能力が
ライブラリ作成者よりも優れていると申しております。
- 364 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 20:55:03 ]
- そういうのを盲信って言うんだよw
- 365 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:07:18 ]
- 見事に釣られてしまったようです。
- 366 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:11:49 ]
- >>362
361だが、過信してはいないつもりだが、エラーの要因はまず自分のソースを疑うね その点はboostでも同じだよ まぁ、そう考えればSTLはバグがないとまでは言わなくとも(実際にある)、自分のソースを疑うってだけだ だから過信、盲進してるかもな ただ、boostはコンプライアンス上の問題やらでdefect発生時にどうなのよ?ってだけだよ 技術的な観点では、俺にとってboostはSTLのサブセットだよ。なにせ、boostの開発に携わってるのは C++標準化の連中なんだから それに、>>363のいうようにあらゆるケースや検証をして世の中に出てきたSTLと、必要なテストしかしてない 自分の作成したコードが正しいなんて言う根拠はどこにもない で、>>362はSTLよりも優れたテンプレートを作っていると?w
- 367 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:18:08 ]
- boostはhppって拡張子が嫌い。
- 368 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:20:04 ]
- hppはまだいい
ippってなんじゃらほい
- 369 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:23:05 ]
- 現行STLやboostのメンバー見れば凄いのが揃ってるのはわかる。
コンパイラ作成者やM$のデヴェもいる。
- 370 名前:361 mailto:sage [2008/03/20(木) 21:32:54 ]
- >>367
俺、boost信者になってからは寧ろ好きになったw だけど、自分のコードはやはり .h を拡張子にしたいね。前プロジェクトではboost使いまくりーの、 .hppを拡張子にしまくりーのだったがw
- 371 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:40:51 ]
- >>366
>boostの一部がTRで採用されて0xに反映されたら標準ライブラリとみなせるだろうけど… 標準ライブラリと見なせることとコードの信頼性に何か関連性はあるのかね、と思ったのよ。
- 372 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:45:03 ]
- >>371
で、boost使ってて何かトラブったことあんの?
- 373 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:51:19 ]
- >>371
すくなくともベンダがリリース前にテストしたという信頼性は担保されるだろ
- 374 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:54:34 ]
- .h はCとの互換性を考えてあるヘッダのみに使って欲しいなあ
C++専用のヘッダは hpp とか hh とか hxx とか使って欲しい # emacsで開くとc-modeになってしまったという経験がある # もちろんファイルの先頭にモードを書いておけば済む話だけども
- 375 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 21:57:05 ]
- 要件を満たすための全てのテストが通れば、boostを使っていようが自分で作ったライブラリを使っていようがok
自分で書いたコードが正しいと確信するための作業をboostにも適用すればいいと思う …標準ライブラリもいろいろで、C++の仕様見てないんじゃないかと疑いたくなるようなのもあるよ
- 376 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:05:07 ]
- >>372
逆。 標準ライブラリと見なせなくても boost には標準ライブラリと同等の信頼性はあると思っている。
- 377 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:14:20 ]
- boostっていっても信頼性は一様じゃないと思うが
Boost.PPの滅多に使われないマクロあたりに嫌なバグが潜んでたとしても驚かないな
- 378 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 22:27:47 ]
- >>374
# vimのcpp用indentスクリプトの貧弱さは泣けてくる
- 379 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:22:49 ]
- まあ、昔からあってさらに頻用されてるやつは十分信頼性あると思うけどね。
- 380 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:27:46 ]
- っつー訳で
auto_ptr は使うなと
- 381 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:39:18 ]
- >>374
はげど! C互換もないのに.hって何だよ?と。 しかしライブラリを見てたらだんだん ヘダファイルに拡張子なくてもよくね?と思えてきた
- 382 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:40:52 ]
- >>381
エディタで開くときに面倒・・・ただそれだけ。
- 383 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:46:18 ]
- ファイルを分類したいときも拡張子が無いと困るな。
- 384 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:47:13 ]
- 拡張子に縛られてるOSは大変だな。
- 385 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:55:42 ]
- ファイル実体内にメタデータ仕込むとかも論外だけどな
- 386 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 23:58:24 ]
- ファイルシステムに組み込むよな、普通。
- 387 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:03:46 ]
- >>385
それってファイル壊してない?そんなOSがあんの?
- 388 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:03:49 ]
- 拡張子だと気軽に書き換えられるからちょっと楽かも
- 389 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:08:28 ]
- xxx.tiff
↓ xxx.jpg 「劣化しますがよろしいですか?」 (OK) (キャンセル) (pngにする) そんなOSがあったら、使いたくはないが、触ってみたい。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:10:13 ]
- マックバイナリというものがあってだな
- 391 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 00:12:35 ]
- boostの主要な部分って、仕様は固定されてるの?
結局、そこが一番問題じゃないかね。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 02:08:23 ]
- そういや、std::auto_ptr使うような場面でboost::shared_ptr使った時、
実行コスト的にはやっぱり不利になるんかな? 大した違いじゃ無いだろうけど、ちょっと気になる。
- 393 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 05:31:04 ]
- なる
- 394 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 07:07:25 ]
- shared_ptr の初期化にはメモリ確保が余分に必要。
参照カウンタが0になった時にはメモリの解放が余分に必要。
- 395 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 09:32:33 ]
- >>387
9までのMac OSってそうじゃないの?
- 396 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 10:08:28 ]
- >>394
あと削除子保持するコストも必要だと思う。
- 397 名前:オガちゃん萌え ◆tyvkWCNtzY mailto:sage [2008/03/21(金) 19:34:49 ]
- Windowsならともかく、UNIX系は拡張子なんて慣例で付けるものでどうでもいい
が、やはりC++とCのヘッダファイルを区別するのに、hとhxxにしときたい JAVAとかC#プログラマとかはC/C++でc/cpp、hのペアのファイル直すのがめんどいらしい
- 398 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 20:20:44 ]
- >>395
違うよ。 いわゆるMacBinaryはデータフォークとは明確に分離してる。 まあ、他のプラットフォームにしてみれば異質なものに代わりはないけど。
- 399 名前:デフォルトの名無しさん mailto:sage [2008/03/21(金) 20:48:12 ]
- execが最初の2byteでシェルスクリプトを判断するようなものかな?
どうでもいいけど
- 400 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 02:44:49 ]
- どっちかと言うと、ファイルのプロパティとしてファイル名やパーミションやタイムスタンプがあるように、
ファイルタイプとクリエータがある感じ。 MacBinary形式と言うのは、これらのプロパティを128バイトのヘッダとし、その後にデータフォークと (必要なら)リソースフォークを連結した特殊なファイル形式のこと。
- 401 名前:オガちゃん萌え ◆tyvkWCNtzY mailto:sage [2008/03/22(土) 10:16:01 ]
- >>400
ファイル名、タイムスタンプ、権限や属性はファイルシステムで管理しているがMacは違うの? ところで、list.sort()やalgorithmのsort条件を関数オブジェクト使って決めると思うが、 関数オブジェクトという言葉が通じない人が多い operator()のオーバーロードってことではファンクタというほうがわかりやすいのだろうか?
- 402 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 14:22:24 ]
- 関数オブジェクト自体は理解してるの?
ちなみに自分はファンクタという言い方はあとで知った。
- 403 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 14:53:28 ]
- 関数オブジェクトって関数をオブジェクト化したみたいで好きじゃないな。
コード上で関数のように使えるだけで、関数とは全く関係ないのに。
- 404 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 15:19:09 ]
- 作るのが面倒って点に関してはあまり好きじゃないが、
やってることはエレガントだとは思う。
- 405 名前:デフォルトの名無しさん [2008/03/22(土) 17:22:14 ]
- クラスと何が違うのかわかんね
- 406 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 17:44:24 ]
- 特別学級みたいなもんです
- 407 名前:オガちゃん萌え ◆tyvkWCNtzY mailto:sage [2008/03/22(土) 20:16:13 ]
- >>402
ファンクタを理解しているか?って言われれば、理解しきっていると言えるほど俺は自信ないw Cの時によく使った関数ポインタのような、イベントハンドリングのロジックを外部化したり、コールバックなんか に使うもんだという理解が強いかな あとは、ポリモーフィズムとして同一で処理ロジックだけカスタマイズするときにファンクタとすることが多い 話は変わるが、組込み系ではメモリシステムをラップすることが多いとおもうが、 operator new()、operator delete()、operator new []()、operator delete []()なんかをオーバーロードするときは EffectiveC++なんかを読み返してしまうよ… メモリシステムといってそこでリークやオーバーフロー、未初期化アドレスアクセスなんかしてたら偉いことに なってしまうし そもそも、自分はC++、STLを理解しきっているとは思ってないよ 先週その典型例があった、C++といいつつCでマクロを書いたのだが、printf()をラップして可変引数をログ出力 するってやつ。stdarg.hの使い方を分かってなかったw そういう>>402は?
- 408 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:22:45 ]
- stdarg.h 使うってことはマクロじゃないんでない?
まあ、その関数をさらにマクロでラップしてるんだろうけど。
- 409 名前:402 mailto:sage [2008/03/22(土) 20:26:05 ]
- いや、402は、「あんたが理解してるか?」の意味じゃなくて、
「関数オブジェクトという言葉が通じない人は関数オブジェクトの存在を知らないから通じないんじゃない?」っていう意味です。 関数オブジェクトという用語を知らずに関数オブジェクトを使うかなあって思ったから。 自分も理解しきってないよ。簡単な関数オブジェクト作れるレベル。
- 410 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 20:51:00 ]
- なんで雑談してんの?
- 411 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:17:29 ]
- 相談が無いからだろう
相談できる雰囲気でもないがね
- 412 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 00:44:28 ]
- 何で雑談しているのかを聞く それも雑談なんじゃね?
自分の胸に聞くのがはえーんじゃね?
- 413 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 01:03:59 ]
- >>407
ひょっとして有名人? 関西でPGでかつどうしてんの?
- 414 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 01:10:46 ]
- とりあえず2期のオガちゃんは萌えた。
- 415 名前:オガちゃん萌え ◆tyvkWCNtzY mailto:sage [2008/03/23(日) 20:37:34 ]
- >>409
ざらにいるんじゃないか、ファンクタを知らないPGは だけど、今のPRJはユースケース駆動モデルでOOPかつAOP的コンセプトを多分に取り入れてる から、ファンクタや関数オブジェクトの名前すら知らないようではさすがにPGとして使えない デザインパターンの幾つかを理解しているくらいは最低求められる とはいいつつも、知らずにそういうパターンを使っているってことは経験あるとおもうよ 大抵はライブラリとして用意されてるものを別途作って無駄なことやってることになるんだろうけどねw >>410-412 まぁ固いこと言わないでマターリやろうよ >>413 いや、有名人でもなんでもないよw 出身地は関西だが、都内で仕事してるしさ >>414 オガちゃんいいよな!
- 416 名前:オガちゃん萌え ◆tyvkWCNtzY mailto:sage [2008/03/23(日) 20:41:16 ]
- >>408
可変引数を使うのにstdarg.hを使ったよ va_start()やらはマクロを通して最終的にコンパイラ組込み型だからさ ログ吐き用とはいえ、%SSっていう変なリテラルを敢えて作って、UTF-16の文字列をUTF-8(ASCII) に変換してログ出しするってのを作ったわけなのだが、案外はまってしまったw
- 417 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 12:37:23 ]
- 緒方賢一に萌えるスレはここですか?
- 418 名前:デフォルトの名無しさん mailto:sage [2008/03/27(木) 00:46:11 ]
- そうです。
- 419 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 01:48:57 ]
- vectorにデータを追加した時にメモリ確保に失敗した場合、検出する方法ってありませんか?
newでいうbad_allocの例外をキャッチするような感じ。
- 420 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:12:07 ]
- bad_alloc捕まえれば?
hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200112/01120006.txt
- 421 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:18:03 ]
- >>420
な、なんだこの低レベルなやり取りは…
- 422 名前:419 mailto:sage [2008/04/16(水) 02:26:03 ]
- >>420
お! VC2005で確認しました。 STLでもbad_allocスローしていたんですねw あざ〜す♪
- 423 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:58:35 ]
- アホすぎる
- 424 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:43:19 ]
- VC6 ではデフォルトで new が bad_alloc 投げなくて
アクセスバイオレーションになるのは有名な話だけどね。
- 425 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:17:17 ]
- で?何処にVC6だという前提が示されていたの?
- 426 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 08:01:17 ]
- なんだこの意味不明の質問
- 427 名前:デフォルトの名無しさん [2008/04/16(水) 20:34:00 ]
- で、どこにVC6でないという前提が示されていたの?
とでも言ってほしんだろうか おまえらもっと仲良くしろよ タダでさえ過疎ってんのに
- 428 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:03:38 ]
- 424 は 豆知識としてとらえるのが普通だと思うんだけどな。
419の環境がどうとかじゃなくて。
- 429 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:01:51 ]
- 常識人は一人だけ。残りは全員アホ。
そんな微妙すぎるリンクを貼った>>420がまず意味不明。 >>424の内容はもっともだが、VC6世代なら誰でも知ってる常識レベル。 なぜあえてそこだけピックアップして言及したのか意味不明。 何にカチンと来たのか、その後の煽り合いも意味不明。 つまりお前ら全員意味不明。
- 430 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:17:11 ]
- なぜあえて、というところは>>419>>420>>422の「bad_alloc がスローされるんだ♪」
という流れを見ての、ちょっとした老婆心じゃね?
- 431 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 00:17:46 ]
- >>429
要するに、君は色んなことの意味がことごとくわからない人、なわけだよね。 可哀相だけど、馬鹿につける薬って無いらしいから・・・合掌。
- 432 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:22:42 ]
- おまえら昔はぬるぽ返してたんだよとか
今でもnothrowとかできるんだよとか ちゃんと教えてやれよ
- 433 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:28:35 ]
- この程度で煽りに見えるとか
- 434 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:10:34 ]
- VC だとぬるぽは VC6 までだね。
だからこそ STL で >>424 が起こる訳だが。
- 435 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:23:43 ]
- >>433
ま、煽りではあると思うよ、実際。 煽りと感じないことをアピールして煽り耐性自慢してもしょうがない。
- 436 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 19:15:49 ]
- 仲良くしようよ。
- 437 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 20:11:21 ]
- friend関数を
- 438 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:08:29 ]
- 窓から
- 439 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:12:05 ]
- こんにちは
- 440 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 12:20:53 ]
- やあ、おぜうさん
- 441 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:48:43 ]
- まあ、ごきげんやう
- 442 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:21:42 ]
- よひてんきですね
- 443 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:47:47 ]
- 庭にはてふてふも飛んでます
- 444 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:36:50 ]
- std::list::erase の引数の型は std::list::const_iterator の方が適切ですよね?
- 445 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 13:42:02 ]
- なんで?
- 446 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 14:58:19 ]
- std::list::erase() に渡した反復子の参照先が将来的に変更されることがないからです。
- 447 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:09:25 ]
- constなポインタでもdeleteできるから、
それもある意味整合性があると言える気がする。
- 448 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 20:57:09 ]
- 同じタイプのmapが2つあったときに、
片方のmapにもう片方のmapの要素を全部移動する方法ってありませんか? swapみたいにコピーしないで済む方法があればいいんですが。
- 449 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:28:33 ]
- swapじゃダメな理由は?
- 450 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:29:25 ]
- joinしたいからswapじゃダメなんじゃね
- 451 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:38:01 ]
- >>449
450さんの言われたとおりです。 限定的にしか使わないクラスをsecondにしてるので operator=オーバーライドしてコスト下げるしかないかなぁとは思っています。 Boostとかであればそれでもいいんですが。
- 452 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:39:45 ]
- second をポインタにして、
実体はリストに保持しておくとか。
- 453 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 01:25:04 ]
- STLportのVC9正式対応版はよくれ
- 454 名前:デフォルトの名無しさん [2008/05/05(月) 17:27:47 ]
- typedef std::iterator<std::bidirectional_iterator_tag, char> MyIterator;
MyIterator it; *it = 'A'; これは、何がいけないんでしょうか?
- 455 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:38:17 ]
- int* p;
*p=0; これのどこがいけないと思いますか?
- 456 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:44:16 ]
- なぜ質問に質問でこたえるのですか?
- 457 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 17:58:26 ]
- 質問に質問で答えてはいけないのですか?
|

|