1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ] C++標準ライブラリの一つ、STLについて。 前スレ 【C++】STL(Standard Template Library)相談室 8 pc11.2ch.net/test/read.cgi/tech/1198435319/ 過去ログ・リンク・書籍紹介は >>2 以降
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 ] 質問に質問で答えてはいけないのですか?
458 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 18:03:57 ] >>454 (っ´▽`)っ itの記憶領域確保しろよ☆ it = new MyIterator('A'); かな?
459 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 18:11:05 ] え?
460 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 18:13:01 ] >>455 >>458 そういう問題じゃないだろ そもそもstd::iterator<>はインスタンスを作ることを意図したクラスじゃないし、 operator*も定義されてない
461 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 18:19:39 ] >>460 いや、阿呆なのは458だけでしょ。 >455の例えはよくわかる。
462 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 18:23:11 ] 俺にはさっぱり分からん
463 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 18:23:46 ] >>461 (っ´▽`)っ そうだよ。(っ´▽`)っがヴァカなだけだよ
464 名前:側近中の側近 ◆0351148456 [2008/05/05(月) 18:26:04 ] (っ´▽`)っ だってC++よくわからないんだも〜ん☆
465 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 18:26:07 ] m9('A')
466 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 19:29:39 ] >>454 じゃあ、どんな動作を期待しているのか述べてみよう。
467 名前:デフォルトの名無しさん mailto:sage [2008/05/05(月) 20:51:15 ] >>461 胴囲
468 名前:デフォルトの名無しさん [2008/05/07(水) 21:58:26 ] >>455 の例えは全然わからんな。 何が言いたいの?
469 名前:デフォルトの名無しさん mailto:sage [2008/05/07(水) 22:01:40 ] 何も指してないイテレータを参照剥がししてどうすんだ? わかりやすくポインタで例えてやろうかあぁ?
470 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 06:00:33 ] もし>>469 なら、やっぱり的外れだろ std::iterator<>はそもそもイテレータじゃないんだから
471 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 07:23:47 ] ぼくにも分かりやすいようにガンダムで例えてください
472 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 11:49:01 ] ガンダムの格納庫はあるのに、 肝心のガンダムがない
473 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 12:48:04 ] std::string とかでぬるぽ使えないのはなんで?
474 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 12:49:07 ] >>473 どういう動作をさせるためにどうやって使いたいのかわからない。
475 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 14:19:39 ] >>474 const char * にNULLを渡すか空文字を渡すかで動作が違う関数があると、 それをstd::stringでラップするときに微妙に困るじゃない。
476 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 14:36:20 ] boost::optionalの出番か?
477 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 15:07:11 ] >>475 class my_string : public std::string { bool m_is_null; public: my_string() : m_is_null(true) {} operator=(const char* p) { if (p==NULL) set_null() else set_string(p); } operator=(const std::string& s) { set_string(s); } void set_null() { m_is_null = true; clear(); } void set_string(const std::string& s) { m_is_null = false; *this = s; } bool is_null() { return m_is_null; } }
478 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:30:54 ] >>477 実は同じのを作って使ってるんだ。でもありがとう。
479 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 19:58:46 ] Concrete Containerをplubic継承www
480 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:02:34 ] と笑う人もいるので、抽象化して template <class T> Nullable : public T { ... }; などしておいてはどうだろうか
481 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:14:25 ] 仮想デストラクタのないクラスはpublic継承しちゃだめだろ常識的に考えて・・・
482 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:16:28 ] delete されるような場面でアップキャストしなけりゃ良いんじゃね?
483 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:16:43 ] すると笑う人は笑わないのか?
484 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:26:28 ] 結局boost::optional自作になるのか
485 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 20:42:08 ] なんで継承したがるんだ
486 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:01:00 ] 楽にかつ安全に特徴を追加する方法って無いのかねぇ…
487 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 21:33:02 ] 普通にオーバーロードを活用すればいいんじゃね? >486
488 名前:デフォルトの名無しさん mailto:sage [2008/05/08(木) 22:14:23 ] std::string * でいいような…それかboost::optional<std::string>
489 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 01:12:47 ] const char *でいいだろ・・・
490 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 02:04:55 ] 話は逸れるけど、逆にnullが存在し得る参照型Stringを持つJava/C#を触ると、 nullの存在がうっとおしいと思うときがあるから不思議。
491 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 07:19:30 ] ぬるぽ
492 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 08:13:15 ] >>490 そうそう、無効値としてnullか""のどちらにするか結構悩む。
493 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 11:55:38 ] std::iterator は仮想デストラクタないけど public 継承していいんですか?
494 名前:デフォルトの名無しさん [2008/05/09(金) 13:04:18 ] EBOがあるからいいんじゃないか?
495 名前:デフォルトの名無しさん [2008/05/09(金) 13:06:26 ] 間違えたw 気にしないで・・・。
496 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 13:17:01 ] >>493 typedefしかしてないクラスだから、public継承しないと意味無いと思うけど。
497 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 15:25:34 ] このほうが安全じゃない? class my_iterator : private std::iterator<Tag, Type> { typedef std::iterator<Tag, Type> super_t; public: using super_t::iterator_category; using super_t::value_type; using super_t::difference_type; using super_t::pointer; using super_t::reference; };
498 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:20:17 ] std::iterator や std::unary_function のようなクラスは protected な非仮想デストラクタが定義されていればいいのに。
499 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:23:23 ] >>498 自分が何言ってるかわかってるのかw
500 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 18:53:04 ] それ自身インスタンス化することないし、基本クラスとして使うこともないし いいじゃないの?
501 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:07:08 ] データメンバもメンバ関数もないクラスにアップキャストしても 何もいいこと無いからな
502 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 19:56:40 ] マーカインタフェースという概念があってだな。
503 名前:デフォルトの名無しさん mailto:sage [2008/05/09(金) 20:22:33 ] >>499 C++ Coding Standardsの50項目目に紹介されている。