[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 11/25 00:30 / Filesize : 208 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】STL(Standard Template Library)相談室 8



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 ]
そんな当たり前の事言われましても。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<208KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef