【C++】STL(Standard ..
339:デフォルトの名無しさん
08/03/20 06:41:18
あ、すまんもう一つレスが入ったか。
>>337
難癖ではないよ。boost大好きだし。
> 誰も速度が速いとかオールラウンドに使えるという話はそもそもしていないんじゃね。
いや、>>332もそういう話はしてない。
「エキスパートが作ってるという話」「ライブラリのプロが書いたソースだという話」の一環として書いた。
エキスパートとかプロっていう表現が踊り出すと(この表現自体は正しい)、ある種の人間に
変な思考を植え付ける結果になることがよくあるんだ。
冷静に判断しなきゃいけないところで「boostのほうが凄いに決まってる!だってエキスパートが作ったんだもん!」
「だってライブラリのプロが書いたんだもん!」みたいなね。
そんな馬鹿は放っておけばいいという意見もあるだろうけど、でも俺は今回、信じすぎは良くないからね、
という一言があったほうが、流れとして適切だと判断したから書いたわけ。
340:デフォルトの名無しさん
08/03/20 07:18:46
車輪を再発明するよりSTLやboostで合うなら使っていこうよ
レビューされているぶん、俺たちが会社で書く似たようなコードより信頼性は高いだろう
これだけの話だろ
車輪が環境に合わない場合は自作するしかないけど(>>333 の場合)
自分で書くよりは信頼性が高いだろうというだけの話が
何故信仰や絶対という話になるのか理解に苦しむな…
341:デフォルトの名無しさん
08/03/20 07:20:39
リンクミス >>332 の場合
342:デフォルトの名無しさん
08/03/20 07:35:59
>>340
そう、それだけの話。
で、>>332も「それだけの話」なんだけど(boostは概ね信頼できるという「事実」に対して、
必ずしも我々を越えちゃいないという「事実」を例示付きで添えただけ)、妙に突っ込む人がいて長くなってる。
343:340
08/03/20 07:41:09
>>342
俺も突っ込んでる一人なんだが…w
344:デフォルトの名無しさん
08/03/20 07:47:11
>>343
見ればわかるけど・・・。
345:デフォルトの名無しさん
08/03/20 07:50:01
この環境ではスピードが遅くて使い物にならん!だから自作した!
boostは盲信するな!絶対視するな!
こんなイミフな展開にツッコミ入れない人間がどこにいるの。ワロス
346:デフォルトの名無しさん
08/03/20 07:52:42
イミフな展開になるように言い換えてるからじゃね?
そもそも>>332一つなら「展開」でも何でもないよ。単発だもの。「展開」は皆で「作った」んだよ。
347:デフォルトの名無しさん
08/03/20 07:54:29
なんかもう、1レスずつ突っ込み方が違っちゃってて、
数撃ちゃ当たる状態だな。そんなに必死に「やり込めたく」なるのかなぁ、俺のレス。
348:デフォルトの名無しさん
08/03/20 08:12:22
初心者です。STLのエラーメッセージが黒魔術で困っています。
皆さんはどのように理解してデバッグなさっていますか?
349:デフォルトの名無しさん
08/03/20 08:30:04
Effective STL に「STLのエラーを読めるようにしよう」みたいな項目がある。
要約すると、 std:basic_string< 〜 > とかを string に置換して読むこと、
こういうエラーが出たときはこういうミスを犯している可能性が高いっていう対応を知ること。
俺はエラーメッセージは読まずにえらーが出てる最初の行だけ見て直すけどw
350:デフォルトの名無しさん
08/03/20 09:34:19
>>348
エラーメッセージは見るな
自分のソースを見ろ
351:デフォルトの名無しさん
08/03/20 09:35:11
C++ Templateにも追い方が少し書いてあったと思う
352:デフォルトの名無しさん
08/03/20 09:36:01
初心者って絶対自分のコード疑わずに
コンパイラのせいにするよなぁ
C++どころかCの頃からそうだったなぁ
353:デフォルトの名無しさん
08/03/20 09:46:10
言語に関らずそうだよ
354:デフォルトの名無しさん
08/03/20 10:49:36
VC++だとテンプレートの中でエラー・警告が出たら、
その呼出元も表示してくれるので、
ひとまず自分のソースコードのどこの行が悪いのかはわかる。
あとはにらめっこの始まりなんだけどね。
355:デフォルトの名無しさん
08/03/20 12:23:57
とりあえずエラー行を見る。
それで大体の場合は分かる。
それで分からない場合、
次はテンプレートの型とエラーの種類を見る。
長ったらしいテンプレート引数は別に見なくていい。
それで分からない場合にはいよいよテンプレート引数を見るけど、
大体はその中で自分で作ったクラスが悪さしていることが多いのでそれをまず見る。
それでもダメな時は全体を見る。
356:デフォルトの名無しさん
08/03/20 13:12:39
const指定が間違ってるとか
名前照合に失敗してるとか
そういうことが多いような
357:デフォルトの名無しさん
08/03/20 13:19:10
自作関数オブジェクトをアルゴリズムに適用するときとかね
358:デフォルトの名無しさん
08/03/20 13:29:42
>>356
constの有無程度なら「constがある/ない」で警告してくれればいいんだけど、型を変換できないと言われてtypedefしてない型を延々出されると何事かと思う。
もう慣れたけど。
359:デフォルトの名無しさん
08/03/20 13:57:09
STLの内部で使ってるの型を吐き出してくれるから、
VS付属→STLPortとか実装を取り替えると同じエラーでもメッセージがぜんぜん違ってくれる素晴らしい罠。
360:デフォルトの名無しさん
08/03/20 14:02:01
さてconceptはまだですか?
361:デフォルトの名無しさん
08/03/20 20:42:46
boostを盲進、過信するのはやや問題があるとは思う
特に納品物というか成果物としては。いくらboostのライセンスが軽いとはいえ。
boostの一部がTRで採用されて0xに反映されたら標準ライブラリとみなせるだろうけど…
いっぽうで、ツール類作るときは積極的に使用する。
tokenizerとかregexとか、bindなんか使うとやみつきになる
その点、STLはまずコンパイル・リンクエラーなってる場合はほぼ間違いなく自分のコードに問題あり
もしくは、VC++とかBorlandC++とかそういうコンパイラ
でも、テンプレートが展開されたエラーは原因を見つけるのに慣れないと苦労するのも確か。
362:デフォルトの名無しさん
08/03/20 20:53:02
>>361 は標準ライブラリを盲信、過信していると思う。
363:デフォルトの名無しさん
08/03/20 20:54:40
と凡人プログラマが申しております。彼は自分のプログラミング能力が
ライブラリ作成者よりも優れていると申しております。
364:デフォルトの名無しさん
08/03/20 20:55:03
そういうのを盲信って言うんだよw
365:デフォルトの名無しさん
08/03/20 21:07:18
見事に釣られてしまったようです。
366:デフォルトの名無しさん
08/03/20 21:11:49
>>362
361だが、過信してはいないつもりだが、エラーの要因はまず自分のソースを疑うね
その点はboostでも同じだよ
まぁ、そう考えればSTLはバグがないとまでは言わなくとも(実際にある)、自分のソースを疑うってだけだ
だから過信、盲進してるかもな
ただ、boostはコンプライアンス上の問題やらでdefect発生時にどうなのよ?ってだけだよ
技術的な観点では、俺にとってboostはSTLのサブセットだよ。なにせ、boostの開発に携わってるのは
C++標準化の連中なんだから
それに、>>363のいうようにあらゆるケースや検証をして世の中に出てきたSTLと、必要なテストしかしてない
自分の作成したコードが正しいなんて言う根拠はどこにもない
で、>>362はSTLよりも優れたテンプレートを作っていると?w
367:デフォルトの名無しさん
08/03/20 21:18:08
boostはhppって拡張子が嫌い。
368:デフォルトの名無しさん
08/03/20 21:20:04
hppはまだいい
ippってなんじゃらほい
369:デフォルトの名無しさん
08/03/20 21:23:05
現行STLやboostのメンバー見れば凄いのが揃ってるのはわかる。
コンパイラ作成者やM$のデヴェもいる。
370:361
08/03/20 21:32:54
>>367
俺、boost信者になってからは寧ろ好きになったw
だけど、自分のコードはやはり .h を拡張子にしたいね。前プロジェクトではboost使いまくりーの、
.hppを拡張子にしまくりーのだったがw
371:デフォルトの名無しさん
08/03/20 21:40:51
>>366
>boostの一部がTRで採用されて0xに反映されたら標準ライブラリとみなせるだろうけど…
標準ライブラリと見なせることとコードの信頼性に何か関連性はあるのかね、と思ったのよ。
372:デフォルトの名無しさん
08/03/20 21:45:03
>>371
で、boost使ってて何かトラブったことあんの?
373:デフォルトの名無しさん
08/03/20 21:51:19
>>371
すくなくともベンダがリリース前にテストしたという信頼性は担保されるだろ
374:デフォルトの名無しさん
08/03/20 21:54:34
.h はCとの互換性を考えてあるヘッダのみに使って欲しいなあ
C++専用のヘッダは hpp とか hh とか hxx とか使って欲しい
# emacsで開くとc-modeになってしまったという経験がある
# もちろんファイルの先頭にモードを書いておけば済む話だけども
375:デフォルトの名無しさん
08/03/20 21:57:05
要件を満たすための全てのテストが通れば、boostを使っていようが自分で作ったライブラリを使っていようがok
自分で書いたコードが正しいと確信するための作業をboostにも適用すればいいと思う
…標準ライブラリもいろいろで、C++の仕様見てないんじゃないかと疑いたくなるようなのもあるよ
376:デフォルトの名無しさん
08/03/20 22:05:07
>>372
逆。
標準ライブラリと見なせなくても boost には標準ライブラリと同等の信頼性はあると思っている。
377:デフォルトの名無しさん
08/03/20 22:14:20
boostっていっても信頼性は一様じゃないと思うが
Boost.PPの滅多に使われないマクロあたりに嫌なバグが潜んでたとしても驚かないな
378:デフォルトの名無しさん
08/03/20 22:27:47
>>374
# vimのcpp用indentスクリプトの貧弱さは泣けてくる
379:デフォルトの名無しさん
08/03/20 23:22:49
まあ、昔からあってさらに頻用されてるやつは十分信頼性あると思うけどね。
380:デフォルトの名無しさん
08/03/20 23:27:46
っつー訳で
auto_ptr
は使うなと
381:デフォルトの名無しさん
08/03/20 23:39:18
>>374
はげど!
C互換もないのに.hって何だよ?と。
しかしライブラリを見てたらだんだん
ヘダファイルに拡張子なくてもよくね?と思えてきた
382:デフォルトの名無しさん
08/03/20 23:40:52
>>381
エディタで開くときに面倒・・・ただそれだけ。
383:デフォルトの名無しさん
08/03/20 23:46:18
ファイルを分類したいときも拡張子が無いと困るな。
384:デフォルトの名無しさん
08/03/20 23:47:13
拡張子に縛られてるOSは大変だな。
385:デフォルトの名無しさん
08/03/20 23:55:42
ファイル実体内にメタデータ仕込むとかも論外だけどな
386:デフォルトの名無しさん
08/03/20 23:58:24
ファイルシステムに組み込むよな、普通。
387:デフォルトの名無しさん
08/03/21 00:03:46
>>385
それってファイル壊してない?そんなOSがあんの?
388:デフォルトの名無しさん
08/03/21 00:03:49
拡張子だと気軽に書き換えられるからちょっと楽かも
389:デフォルトの名無しさん
08/03/21 00:08:28
xxx.tiff
↓
xxx.jpg
「劣化しますがよろしいですか?」
(OK) (キャンセル) (pngにする)
そんなOSがあったら、使いたくはないが、触ってみたい。
390:デフォルトの名無しさん
08/03/21 00:10:13
マックバイナリというものがあってだな
391:デフォルトの名無しさん
08/03/21 00:12:35
boostの主要な部分って、仕様は固定されてるの?
結局、そこが一番問題じゃないかね。
392:デフォルトの名無しさん
08/03/21 02:08:23
そういや、std::auto_ptr使うような場面でboost::shared_ptr使った時、
実行コスト的にはやっぱり不利になるんかな?
大した違いじゃ無いだろうけど、ちょっと気になる。
393:デフォルトの名無しさん
08/03/21 05:31:04
なる
394:デフォルトの名無しさん
08/03/21 07:07:25
shared_ptr の初期化にはメモリ確保が余分に必要。
参照カウンタが0になった時にはメモリの解放が余分に必要。
395:デフォルトの名無しさん
08/03/21 09:32:33
>>387
9までのMac OSってそうじゃないの?
396:デフォルトの名無しさん
08/03/21 10:08:28
>>394
あと削除子保持するコストも必要だと思う。
397:オガちゃん萌え ◆tyvkWCNtzY
08/03/21 19:34:49
Windowsならともかく、UNIX系は拡張子なんて慣例で付けるものでどうでもいい
が、やはりC++とCのヘッダファイルを区別するのに、hとhxxにしときたい
JAVAとかC#プログラマとかはC/C++でc/cpp、hのペアのファイル直すのがめんどいらしい
398:デフォルトの名無しさん
08/03/21 20:20:44
>>395
違うよ。
いわゆるMacBinaryはデータフォークとは明確に分離してる。
まあ、他のプラットフォームにしてみれば異質なものに代わりはないけど。
399:デフォルトの名無しさん
08/03/21 20:48:12
execが最初の2byteでシェルスクリプトを判断するようなものかな?
どうでもいいけど
400:デフォルトの名無しさん
08/03/22 02:44:49
どっちかと言うと、ファイルのプロパティとしてファイル名やパーミションやタイムスタンプがあるように、
ファイルタイプとクリエータがある感じ。
MacBinary形式と言うのは、これらのプロパティを128バイトのヘッダとし、その後にデータフォークと
(必要なら)リソースフォークを連結した特殊なファイル形式のこと。
401:オガちゃん萌え ◆tyvkWCNtzY
08/03/22 10:16:01
>>400
ファイル名、タイムスタンプ、権限や属性はファイルシステムで管理しているがMacは違うの?
ところで、list.sort()やalgorithmのsort条件を関数オブジェクト使って決めると思うが、
関数オブジェクトという言葉が通じない人が多い
operator()のオーバーロードってことではファンクタというほうがわかりやすいのだろうか?
402:デフォルトの名無しさん
08/03/22 14:22:24
関数オブジェクト自体は理解してるの?
ちなみに自分はファンクタという言い方はあとで知った。
403:デフォルトの名無しさん
08/03/22 14:53:28
関数オブジェクトって関数をオブジェクト化したみたいで好きじゃないな。
コード上で関数のように使えるだけで、関数とは全く関係ないのに。
404:デフォルトの名無しさん
08/03/22 15:19:09
作るのが面倒って点に関してはあまり好きじゃないが、
やってることはエレガントだとは思う。
405:デフォルトの名無しさん
08/03/22 17:22:14
クラスと何が違うのかわかんね
406:デフォルトの名無しさん
08/03/22 17:44:24
特別学級みたいなもんです
407:オガちゃん萌え ◆tyvkWCNtzY
08/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:デフォルトの名無しさん
08/03/22 20:22:45
stdarg.h 使うってことはマクロじゃないんでない?
まあ、その関数をさらにマクロでラップしてるんだろうけど。
409:402
08/03/22 20:26:05
いや、402は、「あんたが理解してるか?」の意味じゃなくて、
「関数オブジェクトという言葉が通じない人は関数オブジェクトの存在を知らないから通じないんじゃない?」っていう意味です。
関数オブジェクトという用語を知らずに関数オブジェクトを使うかなあって思ったから。
自分も理解しきってないよ。簡単な関数オブジェクト作れるレベル。
410:デフォルトの名無しさん
08/03/22 20:51:00
なんで雑談してんの?
411:デフォルトの名無しさん
08/03/22 23:17:29
相談が無いからだろう
相談できる雰囲気でもないがね
412:デフォルトの名無しさん
08/03/23 00:44:28
何で雑談しているのかを聞く それも雑談なんじゃね?
自分の胸に聞くのがはえーんじゃね?
413:デフォルトの名無しさん
08/03/23 01:03:59
>>407
ひょっとして有名人?
関西でPGでかつどうしてんの?
414:デフォルトの名無しさん
08/03/23 01:10:46
とりあえず2期のオガちゃんは萌えた。
415:オガちゃん萌え ◆tyvkWCNtzY
08/03/23 20:37:34
>>409
ざらにいるんじゃないか、ファンクタを知らないPGは
だけど、今のPRJはユースケース駆動モデルでOOPかつAOP的コンセプトを多分に取り入れてる
から、ファンクタや関数オブジェクトの名前すら知らないようではさすがにPGとして使えない
デザインパターンの幾つかを理解しているくらいは最低求められる
とはいいつつも、知らずにそういうパターンを使っているってことは経験あるとおもうよ
大抵はライブラリとして用意されてるものを別途作って無駄なことやってることになるんだろうけどねw
>>410-412
まぁ固いこと言わないでマターリやろうよ
>>413
いや、有名人でもなんでもないよw
出身地は関西だが、都内で仕事してるしさ
>>414
オガちゃんいいよな!
416:オガちゃん萌え ◆tyvkWCNtzY
08/03/23 20:41:16
>>408
可変引数を使うのにstdarg.hを使ったよ
va_start()やらはマクロを通して最終的にコンパイラ組込み型だからさ
ログ吐き用とはいえ、%SSっていう変なリテラルを敢えて作って、UTF-16の文字列をUTF-8(ASCII)
に変換してログ出しするってのを作ったわけなのだが、案外はまってしまったw
417:デフォルトの名無しさん
08/03/24 12:37:23
緒方賢一に萌えるスレはここですか?
418:デフォルトの名無しさん
08/03/27 00:46:11
そうです。
419:デフォルトの名無しさん
08/04/16 01:48:57
vectorにデータを追加した時にメモリ確保に失敗した場合、検出する方法ってありませんか?
newでいうbad_allocの例外をキャッチするような感じ。
420:デフォルトの名無しさん
08/04/16 02:12:07
bad_alloc捕まえれば?
URLリンク(hpcgi1.nifty.com)
421:デフォルトの名無しさん
08/04/16 02:18:03
>>420
な、なんだこの低レベルなやり取りは…
422:419
08/04/16 02:26:03
>>420
お!
VC2005で確認しました。
STLでもbad_allocスローしていたんですねw
あざ〜す♪
423:デフォルトの名無しさん
08/04/16 02:58:35
アホすぎる
424:デフォルトの名無しさん
08/04/16 03:43:19
VC6 ではデフォルトで new が bad_alloc 投げなくて
アクセスバイオレーションになるのは有名な話だけどね。
425:デフォルトの名無しさん
08/04/16 07:17:17
で?何処にVC6だという前提が示されていたの?
426:デフォルトの名無しさん
08/04/16 08:01:17
なんだこの意味不明の質問
427:デフォルトの名無しさん
08/04/16 20:34:00
で、どこにVC6でないという前提が示されていたの?
とでも言ってほしんだろうか
おまえらもっと仲良くしろよ
タダでさえ過疎ってんのに
428:デフォルトの名無しさん
08/04/16 21:03:38
424 は 豆知識としてとらえるのが普通だと思うんだけどな。
419の環境がどうとかじゃなくて。
429:デフォルトの名無しさん
08/04/16 22:01:51
常識人は一人だけ。残りは全員アホ。
そんな微妙すぎるリンクを貼った>>420がまず意味不明。
>>424の内容はもっともだが、VC6世代なら誰でも知ってる常識レベル。
なぜあえてそこだけピックアップして言及したのか意味不明。
何にカチンと来たのか、その後の煽り合いも意味不明。
つまりお前ら全員意味不明。
430:デフォルトの名無しさん
08/04/16 22:17:11
なぜあえて、というところは>>419>>420>>422の「bad_alloc がスローされるんだ♪」
という流れを見ての、ちょっとした老婆心じゃね?
431:デフォルトの名無しさん
08/04/17 00:17:46
>>429
要するに、君は色んなことの意味がことごとくわからない人、なわけだよね。
可哀相だけど、馬鹿につける薬って無いらしいから・・・合掌。
432:デフォルトの名無しさん
08/04/17 02:22:42
おまえら昔はぬるぽ返してたんだよとか
今でもnothrowとかできるんだよとか
ちゃんと教えてやれよ
433:デフォルトの名無しさん
08/04/17 02:28:35
この程度で煽りに見えるとか
434:デフォルトの名無しさん
08/04/17 07:10:34
VC だとぬるぽは VC6 までだね。
だからこそ STL で >>424 が起こる訳だが。
435:デフォルトの名無しさん
08/04/17 07:23:43
>>433
ま、煽りではあると思うよ、実際。
煽りと感じないことをアピールして煽り耐性自慢してもしょうがない。
436:デフォルトの名無しさん
08/04/17 19:15:49
仲良くしようよ。
437:デフォルトの名無しさん
08/04/17 20:11:21
friend関数を
438:デフォルトの名無しさん
08/04/18 11:08:29
窓から
439:デフォルトの名無しさん
08/04/18 11:12:05
こんにちは
440:デフォルトの名無しさん
08/04/18 12:20:53
やあ、おぜうさん
441:デフォルトの名無しさん
08/04/18 18:48:43
まあ、ごきげんやう
442:デフォルトの名無しさん
08/04/20 12:21:42
よひてんきですね
443:デフォルトの名無しさん
08/04/20 12:47:47
庭にはてふてふも飛んでます
444:デフォルトの名無しさん
08/04/22 13:36:50
std::list::erase の引数の型は std::list::const_iterator の方が適切ですよね?
445:デフォルトの名無しさん
08/04/22 13:42:02
なんで?
446:デフォルトの名無しさん
08/04/22 14:58:19
std::list::erase() に渡した反復子の参照先が将来的に変更されることがないからです。
447:デフォルトの名無しさん
08/04/22 15:09:25
constなポインタでもdeleteできるから、
それもある意味整合性があると言える気がする。
448:デフォルトの名無しさん
08/04/22 20:57:09
同じタイプのmapが2つあったときに、
片方のmapにもう片方のmapの要素を全部移動する方法ってありませんか?
swapみたいにコピーしないで済む方法があればいいんですが。
449:デフォルトの名無しさん
08/04/22 23:28:33
swapじゃダメな理由は?
450:デフォルトの名無しさん
08/04/22 23:29:25
joinしたいからswapじゃダメなんじゃね
451:デフォルトの名無しさん
08/04/22 23:38:01
>>449
450さんの言われたとおりです。
限定的にしか使わないクラスをsecondにしてるので
operator=オーバーライドしてコスト下げるしかないかなぁとは思っています。
Boostとかであればそれでもいいんですが。
452:デフォルトの名無しさん
08/04/22 23:39:45
second をポインタにして、
実体はリストに保持しておくとか。
453:デフォルトの名無しさん
08/04/29 01:25:04
STLportのVC9正式対応版はよくれ
454:デフォルトの名無しさん
08/05/05 17:27:47
typedef std::iterator<std::bidirectional_iterator_tag, char> MyIterator;
MyIterator it;
*it = 'A';
これは、何がいけないんでしょうか?
455:デフォルトの名無しさん
08/05/05 17:38:17
int* p;
*p=0;
これのどこがいけないと思いますか?
456:デフォルトの名無しさん
08/05/05 17:44:16
なぜ質問に質問でこたえるのですか?
457:デフォルトの名無しさん
08/05/05 17:58:26
質問に質問で答えてはいけないのですか?
458:側近中の側近 ◆0351148456
08/05/05 18:03:57
>>454
(っ´▽`)っ
itの記憶領域確保しろよ☆
it = new MyIterator('A');
かな?
459:デフォルトの名無しさん
08/05/05 18:11:05
え?
460:デフォルトの名無しさん
08/05/05 18:13:01
>>455>>458
そういう問題じゃないだろ
そもそもstd::iterator<>はインスタンスを作ることを意図したクラスじゃないし、
operator*も定義されてない
461:デフォルトの名無しさん
08/05/05 18:19:39
>>460
いや、阿呆なのは458だけでしょ。
>455の例えはよくわかる。
462:デフォルトの名無しさん
08/05/05 18:23:11
俺にはさっぱり分からん
463:側近中の側近 ◆0351148456
08/05/05 18:23:46
>>461
(っ´▽`)っ
そうだよ。(っ´▽`)っがヴァカなだけだよ
464:側近中の側近 ◆0351148456
08/05/05 18:26:04
(っ´▽`)っ
だってC++よくわからないんだも〜ん☆
465:デフォルトの名無しさん
08/05/05 18:26:07
m9('A')
466:デフォルトの名無しさん
08/05/05 19:29:39
>>454
じゃあ、どんな動作を期待しているのか述べてみよう。
467:デフォルトの名無しさん
08/05/05 20:51:15
>>461
胴囲
468:デフォルトの名無しさん
08/05/07 21:58:26
>>455の例えは全然わからんな。
何が言いたいの?
469:デフォルトの名無しさん
08/05/07 22:01:40
何も指してないイテレータを参照剥がししてどうすんだ?
わかりやすくポインタで例えてやろうかあぁ?
470:デフォルトの名無しさん
08/05/08 06:00:33
もし>>469なら、やっぱり的外れだろ
std::iterator<>はそもそもイテレータじゃないんだから
471:デフォルトの名無しさん
08/05/08 07:23:47
ぼくにも分かりやすいようにガンダムで例えてください
472:デフォルトの名無しさん
08/05/08 11:49:01
ガンダムの格納庫はあるのに、
肝心のガンダムがない
473:デフォルトの名無しさん
08/05/08 12:48:04
std::string とかでぬるぽ使えないのはなんで?
474:デフォルトの名無しさん
08/05/08 12:49:07
>>473
どういう動作をさせるためにどうやって使いたいのかわからない。
475:デフォルトの名無しさん
08/05/08 14:19:39
>>474
const char * にNULLを渡すか空文字を渡すかで動作が違う関数があると、
それをstd::stringでラップするときに微妙に困るじゃない。
476:デフォルトの名無しさん
08/05/08 14:36:20
boost::optionalの出番か?
477:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/08 19:30:54
>>477
実は同じのを作って使ってるんだ。でもありがとう。
479:デフォルトの名無しさん
08/05/08 19:58:46
Concrete Containerをplubic継承www
480:デフォルトの名無しさん
08/05/08 20:02:34
と笑う人もいるので、抽象化して
template <class T> Nullable : public T
{
...
};
などしておいてはどうだろうか
481:デフォルトの名無しさん
08/05/08 20:14:25
仮想デストラクタのないクラスはpublic継承しちゃだめだろ常識的に考えて・・・
482:デフォルトの名無しさん
08/05/08 20:16:28
delete されるような場面でアップキャストしなけりゃ良いんじゃね?
483:デフォルトの名無しさん
08/05/08 20:16:43
すると笑う人は笑わないのか?
484:デフォルトの名無しさん
08/05/08 20:26:28
結局boost::optional自作になるのか
485:デフォルトの名無しさん
08/05/08 20:42:08
なんで継承したがるんだ
486:デフォルトの名無しさん
08/05/08 21:01:00
楽にかつ安全に特徴を追加する方法って無いのかねぇ…
487:デフォルトの名無しさん
08/05/08 21:33:02
普通にオーバーロードを活用すればいいんじゃね? >486
488:デフォルトの名無しさん
08/05/08 22:14:23
std::string * でいいような…それかboost::optional<std::string>
489:デフォルトの名無しさん
08/05/09 01:12:47
const char *でいいだろ・・・
490:デフォルトの名無しさん
08/05/09 02:04:55
話は逸れるけど、逆にnullが存在し得る参照型Stringを持つJava/C#を触ると、
nullの存在がうっとおしいと思うときがあるから不思議。
491:デフォルトの名無しさん
08/05/09 07:19:30
ぬるぽ
492:デフォルトの名無しさん
08/05/09 08:13:15
>>490
そうそう、無効値としてnullか""のどちらにするか結構悩む。
493:デフォルトの名無しさん
08/05/09 11:55:38
std::iterator は仮想デストラクタないけど public 継承していいんですか?
494:デフォルトの名無しさん
08/05/09 13:04:18
EBOがあるからいいんじゃないか?
495:デフォルトの名無しさん
08/05/09 13:06:26
間違えたw
気にしないで・・・。
496:デフォルトの名無しさん
08/05/09 13:17:01
>>493
typedefしかしてないクラスだから、public継承しないと意味無いと思うけど。
497:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/09 18:20:17
std::iterator や std::unary_function のようなクラスは
protected な非仮想デストラクタが定義されていればいいのに。
499:デフォルトの名無しさん
08/05/09 18:23:23
>>498
自分が何言ってるかわかってるのかw
500:デフォルトの名無しさん
08/05/09 18:53:04
それ自身インスタンス化することないし、基本クラスとして使うこともないし
いいじゃないの?
501:デフォルトの名無しさん
08/05/09 19:07:08
データメンバもメンバ関数もないクラスにアップキャストしても
何もいいこと無いからな
502:デフォルトの名無しさん
08/05/09 19:56:40
マーカインタフェースという概念があってだな。
503:デフォルトの名無しさん
08/05/09 20:22:33
>>499
C++ Coding Standardsの50項目目に紹介されている。
504:デフォルトの名無しさん
08/05/09 20:30:15
URLリンク(www.open-std.org)
で提案している人がいますね。
反論もあるようです。
505:デフォルトの名無しさん
08/05/09 21:04:17
反論の根拠ってなんでしょうか。
506:デフォルトの名無しさん
08/05/09 21:04:56
>>504に書いてある
507:505
08/05/09 21:13:02
そこの部分だけ一回で理解できなかったのですが、理解できました。ありがとう。具体的なケースはよく分かってませんが。
508:デフォルトの名無しさん
08/05/10 02:18:22
URLリンク(www.wakhok.ac.jp)
ここを見て、stringのメンバ関数findの実装が知りたいと思い、
stringファイルの中を検索してみたんですが見つかりません(環境はVC2008EE)。
find関数は廃止されちゃったんですか?
509:デフォルトの名無しさん
08/05/10 02:27:12
VC++ならコードを書いて、右クリックの定義へ移動が便利。
510:508
08/05/10 02:36:53
thx
xstringファイルに定義されていました。
インクルードの経路が複雑・・・。
511:デフォルトの名無しさん
08/05/10 11:21:32
>>482
>ほとんどの台は左第一停止で引き込み100%だったっしょ。(チェリーバーは順押しで引き込み100%)
いや、だから「すげー細かい」ってことだったんで・・・
スーパーヘビーメタルについては「リプor緑/リプ/リプ」がJacInなんで引き込み100%かと・・・
URLリンク(www.pachinko-club.com)
ミラクルUFOに関してはわからず・・・
>初BET枚数の異なる2種類ボーナス △ デビルメイクライ3 ロデオ 4種類REGの内、1つが1枚、他は2枚
リオパラダイスがBIG/REGでBET枚数違ったような・・・(リオが3月でDMCが6月)
512:デフォルトの名無しさん
08/05/10 12:34:56
業界初スレか。珍しい誤爆だなあ。
513:デフォルトの名無しさん
08/05/10 15:50:42
ごめんなさいorz
514:デフォルトの名無しさん
08/05/10 19:18:19
やっべ何言ってるかさっぱり分からんw
うちらも外から見たら同じなんだろうけど
515:デフォルトの名無しさん
08/05/10 22:31:28
>>514
> うちらも外から見たら同じなんだろうけど
むかしガイドライン板に「一度も行ったことない板に行ってみるスレ」ってのがあって、
この板を覗いた奴の感想は「わけわからん。半分ぐらい日本語じゃない」だったなw
516:デフォルトの名無しさん
08/05/10 23:07:22
マジでまったくわからんなw
まぁ、俺はこの板の内容も半分以上わからんが
517:デフォルトの名無しさん
08/05/11 02:54:05
そういわれるといかにも初心者丸出しな質問でさえ高度に見えてくるぜ
518:デフォルトの名無しさん
08/05/13 01:01:43
す、すいません・・・
STLをかじり始めの者なのですが、質問があります。
std::ofstreamだのstd::wofstreamだのをいじってみたのですが、
どうしてもユニコードでファイル出力ができません。
std::setlocale("japanese")とやってみると、どうやらshift-jisの
テキストが出力されてしまうみたいなんですが・・・。
STLを利用してユニコードのテキストファイルを出力するには
どうすればいいのでしょうか?よろしくお願いします。
ちなみにVC9を使用しております。
519:デフォルトの名無しさん
08/05/13 01:28:34
>>518
ストリームをテキストモードで開いているとUnicodeからANSIへの変換が暗黙のうちに行われます。
バイナリモードで開くとこの変換は行われません。
520:デフォルトの名無しさん
08/05/13 02:03:53
wchar_tはUTF-16だったりUTF-32だったり処理系定義だということに注意。
521:デフォルトの名無しさん
08/05/13 02:08:04
>>518
VC限定ならpubsetbufで大丈夫なはず。
URLリンク(msdn.microsoft.com)
ただしVCのバージョンによっても挙動が違ったはず。
binaryでも大丈夫になったのかな?
最終手段としてはwchar_t*をchar*に無理やりキャストして書き込むとか。
522:518
08/05/13 03:33:12
>>519
>>520
>>521
のみなさん、返答ありがとうございました。バイナリで書き込まない
といけなかったのですね・・・。>>521さんの貼り付けてくれたサンプル
コードでなんとか分かりました。やっとUTF-16のテキストファイルを
作成することができました。ありがとうございました。
523:デフォルトの名無しさん
08/05/13 08:40:07
C#とかの.NET系なら、UTF-16,UTF-8,UTF-32,Shift_JIS,ISO-8859-x,Windows-xxxやら、
システムがサポートする文字コード全て、パラメータ指定するだけで出力出来るんだけどね。
524:デフォルトの名無しさん
08/05/13 08:57:05
つlibiconv
525:デフォルトの名無しさん
08/05/13 15:10:11
つICU
526:デフォルトの名無しさん
08/05/13 15:18:48
つmlang
527:523
08/05/13 18:58:21
C#とかの.NETなら、標準ライブラリのみで、普段入出力に使用しているクラスに
パラメータとして文字コードを追加していするだけでいいんだけどね。
528:デフォルトの名無しさん
08/05/13 19:13:27
それだけの理由でC#を使えるようならとっくに使っているわ。
529:518
08/05/15 21:06:15
す、すいません・・・
その後、いろいろと読み漁ってみた結果、上記のままの理解では、
このスレを読んでいる、同じ疑問を持った人に、無用な誤解を与える
恐れがあるかも知れないので、分かったことを書いておきます。
std::fstreamなどのストリームの文字コードの自動変換は
std::localeクラスの中にあるファセット(文字セット間の変換、通貨、日付と時刻
などの地域化を司るクラス)と呼ばれる部分で行っているらしいです。
で、文字コード変換を司るファセットはcodecvtと呼ばれており、自分の望んだ
文字コードに変換したい場合は、codecvtの派生クラスを作成するのが、
本来のやり方のようです。で、こんなもんを自分で書くのがよいのか、それとも
既に誰かが書いていて、それを利用できるようになっているのか、というところ
までは、まだよく分かっていません。
URLリンク(imt.uni-paderborn.de)
URLリンク(d.hatena.ne.jp)
URLリンク(docs.sun.com)
大変お騒がせしました。これにて失礼します・・・。
530:デフォルトの名無しさん
08/05/15 23:15:51
Boost.IostreamsがUTF-8のcodecvtを持っていたはず。
一般のライブラリでの実装と言えばそれくらいしか知らないけど。
531:デフォルトの名無しさん
08/05/21 21:31:09
唐突で申し訳ありませんが、以下、2点質問させてください。
ご意見で結構なので、よろしくお願いします。
@eraseで、listから登録しているクラスのポインタを削除した場合に、
→リストから削除したクラスのデストラクタはコールされる?
リストから要素のみ削除されると理解していたのですが、
VC6.0のSTLのドキュメントを読んだところ、
N回のeraseでN回のデストラクタが呼ばれると書いてあったため困惑中。
Aマルチスレッドアプリでコンテナなどを用いるのは危険?(VC6.0を想定)
→MSDNにて、eraseを複数のスレッドから同時に実行するとデッドロックする
という記載等があったため、少なくともVC6.0のSTLは
マルチスレッドアプリを作る上で適当でないと思い始めている段階。
実際、beginなどの引数なし関数コール時にアプリが落ちた経緯あり
532:デフォルトの名無しさん
08/05/21 21:37:54
「listから登録しているクラスのポインタを削除」の意味がワカラン
こういう日本語もワカル人がいるので不思議
そういう人を待て
533:デフォルトの名無しさん
08/05/21 21:41:21
std::list<T>なら、eraseしたときに該当するオブジェクトのデストラクタが呼ばれる。
std::list<T*>なら、該当するオブジェクトとはlistの要素たるT*のオブジェクトであり、
T自体のデストラクタは呼ばれない。
Tオブジェクトのデストラクタが呼ばれるようにしたければ、
boost::shared_ptrでも使えというのがC++の現状。
534:デフォルトの名無しさん
08/05/21 21:42:41
>>531
1. について
ポインタ要素を erase してもデストラクタは呼ばれません。
実体を格納している場合には erase でデストラクタが呼ばれます。
2. について
読み取り専用なら安全です。更新があるなら、明示的に排他制御
しましょう。
535:デフォルトの名無しさん
08/05/22 00:29:50
>>533 534
回答ありがとうございます。
概ね、当方の理解と一致しており、胸を撫で下ろしました。
質問事項Aのマルチスレッドでの使用に関しては、
別スレッドでswap/uniqeなどで
iterator iの参照先の内容が変わることを考慮すると、
begin等も容易には使えないですね。
ちなみに、今、他人のソースをレビュー中でして、
人のソースを見ていると、自分の理解が正しいのかどうか
ちょっと不安になってきたりと・・・oTL
536:デフォルトの名無しさん
08/05/22 01:10:30
>>535
unique後はそもそもイテレータが無効になるから、マルチスレッド以前の問題だね。
537:デフォルトの名無しさん
08/05/22 01:33:51
>>535
スレッド安全性については規格では何も規定していないから、実装ごとにドキュメントを
読む必要がある。ドキュメントに記載がなければ、同時アクセスは一切できないものと
考えたほうがいい。そういう実装もあるので、最大限の移植性が必要なら同時アクセスは
一切できないものと考えるべき。
538:デフォルトの名無しさん
08/05/22 12:03:22
Intel謹製のスレッドセーフSTLがあったような・・・
あとポインタ格納しつつeraseしてもデストラクトする実装ならboost::ptr_listってのがある
539:デフォルトの名無しさん
08/05/22 20:39:50
>>537
自分もそうおもふ
540:デフォルトの名無しさん
08/05/22 21:56:49
VC 7.1以降だと文書化されている。
URLリンク(msdn.microsoft.com)
あるオブジェクトについて、同時読取り可、単一スレッドの書込み可。
同時書込みや読み書き同時は不可。
スレッドごとに別のオブジェクトを読み書きするのは問題ない。
例外的にストリーム出力は同時書込み可。
541:デフォルトの名無しさん
08/05/22 22:19:18
テンプレートライブラリはクラスのマクロみたいなもんですよね?
コンパイル時に全部展開されるので多用する場合はメモリを無駄に消費しそうなんですが、
比較的大規模なアプリを作るときは、やはりコンパイル済みのライブラリを使うべきなんでしょうか?
例えばMFCとSTLはどのように使い分けるのが賢いんでしょうか。
542:デフォルトの名無しさん
08/05/22 22:48:06
同じテンプレートを同じ型で別の場所でインスタンス化した場合はリンカが重複を除去する場合が多い
なので、規模が大きくなるほどテンプレートのオーバーヘッドの割合は減少すると思う
MFCとSTLでは重複するのはコンテナくらい
コンテナはSTLの方が大分出来が良いので、基本的にコンテナはSTLのを使えば良いと思う
MFCにべったり近い処理をするときなどは専用のコンテナが使いやすいこともあるかもしれない
結局はケースバイケースかな
543:デフォルトの名無しさん
08/05/22 23:08:54
>リンカが重複を除去する場合が多い
重複除去は仕様。必ず行われる。
544:デフォルトの名無しさん
08/05/22 23:22:41
重複除去しないとstatic変数のユニーク性が保証されなくなる。
545:デフォルトの名無しさん
08/05/23 06:04:20
>>541
例えば CODE セグメントとか .text セクションが 10 倍になって困るのか?
一割り増しでも困るなら、使うのをやめというたほうがいいだろう。
なんというか、なんでもいいから毎月雑誌読もう。二年もするとだいぶ変わる。
546:デフォルトの名無しさん
08/05/23 07:27:13
コピペ思い出した
547:デフォルトの名無しさん
08/05/23 12:17:37
boostで重いやつ(regex、spiritなど)を多用するとメモリ不足になる(VC++なら/Zm指定要求してくる)
さらに酷いとコンパイラやリンカが落ちる。
STLレベルならそこまでのことにはならないが、テンプレートの副作用だな。
548:デフォルトの名無しさん
08/05/23 12:21:04
lambdaなんか使うとtypoが原因でコンパイラが落ちるからなw
549:デフォルトの名無しさん
08/05/23 23:25:01
それはメモリ不足とは別。
550:デフォルトの名無しさん
08/05/24 09:26:13
vectorって単なる動的配列として使ってもOKですか?
たとえば、こんな風にバッファとして直接vectorに値を書き込むのはvectorの使い方として適切?
std::vector<char> TestV;
TestV.resize(MAX_PATH);
::GetCurrentDirectory(TestV.size(),&(TestV[0]));
std::cout<<&(TestV[0])<<"\n";
551:デフォルトの名無しさん
08/05/24 09:27:32
なぜstringを使わない?
552:デフォルトの名無しさん
08/05/24 09:43:05
>>550
vectorの内部バッファの連続性は規格で保証されているのでok
>>551
現時点ではstringの内部バッファの連続性は保証されてなかった気がする。
553:デフォルトの名無しさん
08/05/24 09:44:54
別に連続性云々じゃなくて……
まあいいや。
554:デフォルトの名無しさん
08/05/24 09:54:28
文字配列でない配列にstringを使う方が頭おかしいだろ
そんなコードさわりたくねえ
555:デフォルトの名無しさん
08/05/24 09:57:50
vector<char>って書いて有るじゃん
556:デフォルトの名無しさん
08/05/24 10:24:53
std::string str=string(&(TestV[0]));
std::cout<<str<<std::endl;
とでも書かないと満足できない人なんだよ、きっと。
557:デフォルトの名無しさん
08/05/24 17:11:20
>>553
「まぁいい」って、>>551を書いた根拠がまさにそれで、
立場が無くなって言葉濁してるだけでしょ?w
558:デフォルトの名無しさん
08/05/24 18:17:31
も前らおちつくんだ
559:デフォルトの名無しさん
08/05/24 18:31:26
&(TestV[0])でポインタ得るのはどうよ
560:デフォルトの名無しさん
08/05/24 18:39:25
&TestV[0]
561:デフォルトの名無しさん
08/05/24 20:31:27
&*TestV.begin() ならマジックナンバーが現れなくていい
とか言いたいのかな
562:デフォルトの名無しさん
08/05/24 21:31:08
vector::data()はまだ規格に入ってないんだっけ?
563:デフォルトの名無しさん
08/05/24 22:13:29
>>562
C++0x
564:デフォルトの名無しさん
08/05/25 23:33:58
自分用のライブラリで、
2箇所でSTLを取り入れただけで、.libのファイルサイズが3倍になったんだけど
テンプレート導入でサイズ急膨張って常識なんすか?
565:デフォルトの名無しさん
08/05/26 00:08:32
:テンプレートは結局、自動的にコードを生成する機能といえるのでうまく使わないと予想外にコードが大きくなる。
566:デフォルトの名無しさん
08/05/26 00:27:48
STLを使うとコードが10倍に?
567:デフォルトの名無しさん
08/05/26 00:28:44
>>564
デバッグ情報じゃねーの?
568:デフォルトの名無しさん
08/05/26 02:42:07
元のライブラリが10KByteで30KByteになったとかだったら驚かない。
3MByteが9MByteになったとかだったら、なにやったんだよと思う。
569:デフォルトの名無しさん
08/05/26 02:46:15
シンボル情報削れば大したことにならんと思うが
570:デフォルトの名無しさん
08/05/26 10:31:54
OSもコンパイラもそれらのバージョンも言わずに3倍とな!?
571:デフォルトの名無しさん
08/05/26 12:38:03
コンパイラはg++です
572:デフォルトの名無しさん
08/05/26 12:50:12
VC++でexpressive入れた途端に未最適化コードとmapファイルが1MB増えた覚えはある
573:デフォルトの名無しさん
08/05/27 21:44:52
>>561
そこは &TestV.front() だろ・・・常考。
574:デフォルトの名無しさん
08/05/28 02:04:01
STLスレだけにテンプレ通りの話をしてるのですね
575:デフォルトの名無しさん
08/05/28 22:48:49
template<class T>
class ListEx
{
list<T> m_list;
list<T>::iterator m_itr;
};
iterator の行でエラーになります。
何がいけないのでしょうか?
576:デフォルトの名無しさん
08/05/28 22:52:47
typename list<T>::iterator m_iter;
577:デフォルトの名無しさん
08/05/28 22:57:16
>>576
ありがとうございます
エラーは出なくなりました。
でも、 typename がなぜ必要なのかわかりません。
どこを調べたらいいのでしょうか?
578:デフォルトの名無しさん
08/05/28 23:14:34
>>577
一度、Effective STLを読んでおいた方がいいんじゃないか?
579:デフォルトの名無しさん
08/05/28 23:20:22
>>577
URLリンク(www.google.com)
580:デフォルトの名無しさん
08/05/28 23:22:34
型なのかメンバ変数なのかハッキリしろコラァ!
とコンパイラが怒るから
581:デフォルトの名無しさん
08/05/29 10:23:16
この文脈では list<T>::iterator のTは型に決まってるだろ、と小1時間ほど問い詰めてやりたい
582:デフォルトの名無しさん
08/05/29 10:31:12
Tじゃなくて、iteratorが型かどうかわからない。
583:デフォルトの名無しさん
08/05/29 11:24:32
template<typename T> struct list{ enum{ iterator = 0 }; };
だったらlist<T>::iteratorをする時にはtypenameの代わりに何が必要なのか
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4971日前に更新/192 KB
担当:undef