1 名前:858 [2007/12/24(月) 03:41:59 ] C++標準ライブラリの一つ、STLについて。 前スレ 【C++】STL(Standard Template Library)相談室 7 pc11.2ch.net/test/read.cgi/tech/1185986999/ 過去ログ・リンク・書籍紹介は >>2 以降
482 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:06:11 ] std::stringの配列の連続性は保障されてないそうですが、 実際配列が連続じゃない実装をしてる環境ってあるんですか?
483 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:10:37 ] 配列じゃないよ
484 名前:479 mailto:sage [2008/01/31(木) 18:50:24 ] >>480-481 ありがとうございました。 無い事が分かって安心しました。 必死で作って、既に有ったらかなり凹むのでw(勉強にはなるけど) WinAPIのCreateSemaphore()かmutexで検討したいと思います。
485 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:52:11 ] まあ実際はc_str()の動作を速くするために連続の場合が多いけどな。 しかもヌルターミネータ文字まで入ってたり。
486 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:54:51 ] >>482 ない。というか、次期の規格(C++0x)で連続性が保証されるようになる。 N2461) 21.3.1 basic_string general requirements [string.require] 3 The char-like objects in a basic_string object shall be stored contiguously. That is, for any basic_string object s, the identity &*(s.begin() + n) == &*s.begin() + n shall hold for all values of n such that 0 <= n < s.size().
487 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:58:43 ] std::ropeは標準じゃないけど、初めから切れ切れの文字列を つなぎ合わせる事を想定してるな。
488 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:01:32 ] だからstd::ropeにはメンバ関数c_str()がない。
489 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:02:47 ] でもSTLportのstd::ropeにはc_str()があったりする。変なの。
490 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:04:03 ] 標準じゃないのに std を使うのは違和感あるよな。
491 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 20:06:10 ] STLportはSGI-STLに妙なこだわりを持ってるよな。 何か言われてんのかな。
492 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:13:41 ] > 基本的にSTLはスレッドセーフではない 例えばどんな場合?
493 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:15:33 ] >>492 どんな場合って・・・何するにしてもスレッドセーフを要求する 仕様なんてないはずだけども。
494 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:17:02 ] STLportはスレッドセーフだったような
495 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:21:14 ] うーん、書いてないとスレッドセーフでないってのも・・ beginthread一回でも呼ぶプロセスではstlは一行も使えないってことに なりそうな。 たぶん皆、同一インスタンスに複数スレッドでアクセスしなければ平気 くらいな解釈で使ってるんだよね
496 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:41:35 ] 標準にスレッドセーフという概念がないから語っても意味ないだろ
497 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:19:44 ] スレッドの概念自体が無い
498 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:26:59 ] ちっ、また自己責任かよ。つかえねーな
499 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:30:23 ] 効率のためにintの幅すら決めない言語に向かって何を言ってるのかね
500 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:39:35 ] int幅が実装依存なのはちゃんと作ってれば別に問題ないだろ。
501 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:41:25 ] 原子力発電所も冷凍餃子もちゃんと作ってれば別に問題無いぞ。
502 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:41:37 ] AMD64は自然な長さが64ビットなのにintが32ビットだな
503 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:48:23 ] intが64bitな処理系は現存するのか? その場合、32bitを示す型は何だろう?
504 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:52:06 ] C言語が設計された時期が古いので64ビットとか考えてなかったんだろ
505 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 23:52:21 ] >>503 ILP64 でググれ。
506 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:09:02 ] 32bitといったらlongなんじゃないのか
507 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:16:41 ] >506 まさか、int 64bitでlong 32bitと言ってる?
508 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:17:56 ] ねたにまじ(ry
509 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:24:17 ] LP64のほうが素直だねやっぱり。 I16/LP32はDOSで経験があるし(w
510 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:25:16 ] もうビット数気にする処理には stdint.h 使えばいいということで。
511 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:29:14 ] _int64とかタイプしたくないよヽ(`Д´)ノウワァァァン 4G超えのファイルなんかザラだろうが。
512 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:31:19 ] typedef すれば?
513 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:34:47 ] typedef _int64 long long ってできねーだろ
514 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:37:09 ] え?
515 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:37:34 ] long long とか名前長くしてどうするよ。
516 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:42:24 ] long long は既にあるべよ。long_long_long とかにしようべ。
517 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:44:20 ] >>515 C99にあるんですよlong long。 >>516 そうします。
518 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:47:19 ] long long ago むかーしむかし、あるところに長い長いアゴの男がおりましたとさ
519 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:50:58 ] _int64とはVC++くさいが、 VC++ .NET 2003からはlong longも使えるぞ。
520 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:51:20 ] 中学の英語の授業中誰もが経験するであろうネタだな
521 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:53:43 ] >>516 別に知っとるが、_int64 の方が短くて分かりやすくていいじゃン
522 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:55:01 ] i8 u8 i16 u16 i32 u32 i64 u64 これでtypedefしとけば字数的にはint未満だ。何かとぶつかりそうだけどな。
523 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:55:52 ] そこで名前空間ですよ。
524 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:55:54 ] 以下(8bitのみ未満)の間違い。
525 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:56:53 ] my_primitive_type::u64 なげーよ。
526 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:59:03 ] だから、自分のプログラム全体を特定の名前空間内に入れて、 そこで i8 とか定義しとけば何も付けなくて大丈夫。
527 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:14:27 ] stdintはC++の標準に入ったんだっけか intN_tな連中。
528 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:18:41 ] _tてなんかの略?
529 名前:デフォルトの名無しさん [2008/02/01(金) 02:30:24 ] type
530 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:47:05 ] >>527 最新のドラフトに cstdint と stdint.h が載ってた。次の改訂 (C++0x) で入るみたいだね。
531 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 06:38:05 ] C++0xはC99の(ほぼ)上位互換になるんですか それともC99で使えてもC++0xではサポートされない機能もあり?
532 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 07:22:07 ] コンパウンドリテラルとか 配列個数に変数使うとか そういうのは C++0x で無視
533 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 07:24:48 ] restricted ポインタとか色々無視されてる。
534 名前:デフォルトの名無しさん [2008/02/01(金) 07:54:32 ] 「配列の要素数に変数」はSTLと相性悪すぎだからな。
535 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 08:29:10 ] >>534 kwsk
536 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 09:01:10 ] コンパイル時に型が決まらない、だっけ?
537 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 13:51:10 ] type* v = new type[n]; ... delete[] v; の糖衣構文にしてくれるだけでいいのに。
538 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:33:28 ] stlportsは2008には使えないの?
539 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 16:49:23 ] >>538 STLPort はインストーラ(make)が VS2008 にまだ対応していない。 手動でインストールするなら可能らしい。STLport VS2008 でググレ。俺はまだ試していないので、試したら結果を教えてくれ。
540 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 17:54:00 ] >>538 iostream使うとC2487がいっぱい出るよ
541 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 18:14:05 ] っ _STLP_STATIC_CONST_INIT_BUG
542 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:05:39 ] >>537 std::vector で何が不満なのさ?
543 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:06:58 ] 見た目が汚い
544 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:09:31 ] はぁ?
545 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:21:27 ] std::vector<double> v(i); と double v[i]; なら下の方が綺麗だろう。 2次元配列とかなるともうキモいったらありゃしない。
546 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 03:43:09 ] エェー
547 名前:デフォルトの名無しさん [2008/02/02(土) 04:00:52 ] valarray使えや
548 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:03:42 ] [i] はキモいだろ。どんだけ使い込んでるんだよ。 (i) これは正常。むしろ性情。
549 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 07:29:17 ] 少し、頭冷やそうか
550 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 08:16:48 ] (O) < くぱぁ ╋ /\
551 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 11:50:57 ] >>548 FORTRAN か BASIC ばっかつかってるからそうなるんだ。
552 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:08:05 ] >>546 は double v[i][j]; より std::vector< std::vector<double> > v(i, std::vector<double>(j)); や std::vector< std::vector<double> > v(i); std::for_each(v.begin(), v.end(), std::bind2nd(std::mem_fun_ref(&std::vector<double>::resize), j)); の方が美しいと感じるようだ。
553 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:21:14 ] どうしても知識をひけらかしたい奴がいるようだ。
554 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:29:59 ] 馬鹿か? typedefしろよ
555 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:30:33 ] あんまりしょうもないtypedefたくさん作らないで欲しいお…
556 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:35:53 ] グローバルスコープでないならまだ許せる
557 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 12:50:03 ] typedef vector<int> vector_int; typedef vector<double> vector_double; … こんなのがtypedefs.hに延々ならんでるソースを見せられたときは会社やめようかと思った。 結局1年しか勤めなかったけど・・
558 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:15:32 ] >>557 なにがあかんねん
559 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:17:39 ] >>558 いみないやん
560 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:18:26 ] まぁ普通意味を考えて命名するよな #define VALUE_100 100 て定義する様なもの
561 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:29:30 ] >>557 そのレベルだと好みが分かれそうだなあ vector<string> string_list とかはありがちだけど。intとはな。。
562 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:32:11 ] vectorなのにlist?
563 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:36:40 ] >>561 そういう問題じゃない。 ・typedef名に意味付けがない ↓のようなコメントと通じるものがある a += 100; // aに100を足す ・字数がほとんど変わらず、打鍵数減少につながらない …ところで、あなたは list<string>をどのようにtypedefするの?
564 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:39:41 ] んなマジレスされても。。名前考えんのめんどうだからしないねくらいだが
565 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:48:34 ] 557に意味がないわけじゃないけどな。 typedefされた型しか使わないというのは、 互換性を重視するときは有利になる。
566 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:51:03 ] >>565 具体的にどんな移植性の問題が typedef によって解決されるんでしょうか?
567 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:54:21 ] >>565 typedefはそういう用途に使えることは否定しないけど、 vectorもintも標準の一部だから、互換性の点でもtypedef vector<int> vector_int;とする意味は無いんじゃないの。
568 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:55:54 ] >>566 typedefが移植性のためにあるようなものなのにな。 なぜなにの子供か?
569 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:56:04 ] もしかしてあれか? int のサイズが違う環境では typedef vector<long> vector_int; に置き換えて「すっきり解決」とか、そういう話か?
570 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:01:04 ] intのサイズ違いをそのレベルで解決すべきじゃない。
571 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:03:50 ] つsize_t/off_t
572 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:05:24 ] だからやっぱり vector_int は意味無いだろ >565
573 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:31:24 ] std:: を省略できれば打鍵数が結構減る。
574 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:22:02 ] 打鍵数とかでなく、会社からSTLは一律typedefせよ の命題が 課せられれば、vector_int みたいなものは生まれるし、それでもよいと思うぞ。 だから >>557 がどうこう言う程の問題ではないと思われるが。 こういうのは出たての若いのによくいる 自分は社内でも皆よりよく分かってる と 思いこんでる井の中の蛙ってこった。
575 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:31:06 ] std::foreachとかどうやってtypedefするの?
576 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:34:44 ] >>574 そんな命題を甘んじて受けるほど奴隷ではありません。
577 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:35:12 ] >>574 その通り、会社の方針なら勤めてる以上は従わざるを得ないのは言うまでもない。 そこで、無能だったり考え方の一致しなかったりする上司の下で働く羽目になった場合に取り得る行動は、 我慢して働きつづけるか、さっさと辞めるかの二者択一で、>>557 は後者を選んだだけだろ。 別に非難されるようなことではない。
578 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:36:14 ] >>574 それは無能なプログラマが無能な会社に変わっただけで、>>557 の判断には影響ないだろw
579 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:39:09 ] >>576 それで問題が発生したとき責任取って解決できるのなら それでも良いんじゃね? いざとなったら逃げるのはただの口だけ君。
580 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:43:00 ] vector<vector<vector<int> > >みたいなものを書かざるをえない状況なら vector<T>をtypedefすることもあるんじゃないかな?
581 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:43:44 ] >>579 会社の命令に背いて問題を起こすなんて選択肢はもとからないよ 常識があれば、「従う」と「去る」の二択しか取れない
582 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:43:51 ] そんな当たり前の事言われましても。