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


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

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



1 名前:デフォルトの名無しさん [2008/02/27(水) 02:03:30 ]
C++標準ライブラリの一つ、STLについて。

前スレ
【C++】STL(Standard Template Library)相談室 8
pc11.2ch.net/test/read.cgi/tech/1198435319/

過去ログ・リンク・書籍紹介は >>2 以降

520 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 02:03:53 ]
wchar_tはUTF-16だったりUTF-32だったり処理系定義だということに注意。

521 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 02:08:04 ]
>>518
VC限定ならpubsetbufで大丈夫なはず。
msdn.microsoft.com/en-us/library/tzf8k3z8.aspx
ただしVCのバージョンによっても挙動が違ったはず。
binaryでも大丈夫になったのかな?

最終手段としてはwchar_t*をchar*に無理やりキャストして書き込むとか。

522 名前:518 mailto:sage [2008/05/13(火) 03:33:12 ]
>>519
>>520
>>521
のみなさん、返答ありがとうございました。バイナリで書き込まない
といけなかったのですね・・・。>>521さんの貼り付けてくれたサンプル
コードでなんとか分かりました。やっとUTF-16のテキストファイルを
作成することができました。ありがとうございました。


523 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:40:07 ]
C#とかの.NET系なら、UTF-16,UTF-8,UTF-32,Shift_JIS,ISO-8859-x,Windows-xxxやら、
システムがサポートする文字コード全て、パラメータ指定するだけで出力出来るんだけどね。

524 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:57:05 ]
つlibiconv

525 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:10:11 ]
つICU

526 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:18:48 ]
つmlang

527 名前:523 mailto:sage [2008/05/13(火) 18:58:21 ]
C#とかの.NETなら、標準ライブラリのみで、普段入出力に使用しているクラスに
パラメータとして文字コードを追加していするだけでいいんだけどね。

528 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:13:27 ]
それだけの理由でC#を使えるようならとっくに使っているわ。



529 名前:518 mailto:sage [2008/05/15(木) 21:06:15 ]
す、すいません・・・
その後、いろいろと読み漁ってみた結果、上記のままの理解では、
このスレを読んでいる、同じ疑問を持った人に、無用な誤解を与える
恐れがあるかも知れないので、分かったことを書いておきます。

std::fstreamなどのストリームの文字コードの自動変換は
std::localeクラスの中にあるファセット(文字セット間の変換、通貨、日付と時刻
などの地域化を司るクラス)と呼ばれる部分で行っているらしいです。
で、文字コード変換を司るファセットはcodecvtと呼ばれており、自分の望んだ
文字コードに変換したい場合は、codecvtの派生クラスを作成するのが、
本来のやり方のようです。で、こんなもんを自分で書くのがよいのか、それとも
既に誰かが書いていて、それを利用できるようになっているのか、というところ
までは、まだよく分かっていません。

imt.uni-paderborn.de/download/solaris/Sun_Studio_11/CD1/kits/ide/packages/SPJAhtstd/reloc/SUNWspro/prod/lib/locale/ja/html/manuals/stdlib/user_guide/loc_io/3_2.htm
d.hatena.ne.jp/Cryolite/searchdiary?word=*%5BLocale%5D
docs.sun.com/source/820-2985/loc_io/19_2.htm

大変お騒がせしました。これにて失礼します・・・。

530 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 23:15:51 ]
Boost.IostreamsがUTF-8のcodecvtを持っていたはず。
一般のライブラリでの実装と言えばそれくらいしか知らないけど。

531 名前:デフォルトの名無しさん [2008/05/21(水) 21:31:09 ]
唐突で申し訳ありませんが、以下、2点質問させてください。
ご意見で結構なので、よろしくお願いします。

@eraseで、listから登録しているクラスのポインタを削除した場合に、
→リストから削除したクラスのデストラクタはコールされる?
 リストから要素のみ削除されると理解していたのですが、
 VC6.0のSTLのドキュメントを読んだところ、
 N回のeraseでN回のデストラクタが呼ばれると書いてあったため困惑中。

Aマルチスレッドアプリでコンテナなどを用いるのは危険?(VC6.0を想定)
→MSDNにて、eraseを複数のスレッドから同時に実行するとデッドロックする 
 という記載等があったため、少なくともVC6.0のSTLは
 マルチスレッドアプリを作る上で適当でないと思い始めている段階。
 実際、beginなどの引数なし関数コール時にアプリが落ちた経緯あり

532 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:37:54 ]
「listから登録しているクラスのポインタを削除」の意味がワカラン
こういう日本語もワカル人がいるので不思議
そういう人を待て

533 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:41:21 ]
std::list<T>なら、eraseしたときに該当するオブジェクトのデストラクタが呼ばれる。

std::list<T*>なら、該当するオブジェクトとはlistの要素たるT*のオブジェクトであり、
T自体のデストラクタは呼ばれない。
Tオブジェクトのデストラクタが呼ばれるようにしたければ、
boost::shared_ptrでも使えというのがC++の現状。


534 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 21:42:41 ]
>>531
1. について
ポインタ要素を erase してもデストラクタは呼ばれません。
実体を格納している場合には erase でデストラクタが呼ばれます。

2. について
読み取り専用なら安全です。更新があるなら、明示的に排他制御
しましょう。


535 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 00:29:50 ]
>>533 534
回答ありがとうございます。
概ね、当方の理解と一致しており、胸を撫で下ろしました。

質問事項Aのマルチスレッドでの使用に関しては、
別スレッドでswap/uniqeなどで
iterator iの参照先の内容が変わることを考慮すると、
begin等も容易には使えないですね。

ちなみに、今、他人のソースをレビュー中でして、
人のソースを見ていると、自分の理解が正しいのかどうか
ちょっと不安になってきたりと・・・oTL

536 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:10:30 ]
>>535
unique後はそもそもイテレータが無効になるから、マルチスレッド以前の問題だね。

537 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:33:51 ]
>>535
スレッド安全性については規格では何も規定していないから、実装ごとにドキュメントを
読む必要がある。ドキュメントに記載がなければ、同時アクセスは一切できないものと
考えたほうがいい。そういう実装もあるので、最大限の移植性が必要なら同時アクセスは
一切できないものと考えるべき。

538 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:03:22 ]
Intel謹製のスレッドセーフSTLがあったような・・・

あとポインタ格納しつつeraseしてもデストラクトする実装ならboost::ptr_listってのがある



539 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 20:39:50 ]
>>537
自分もそうおもふ

540 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:56:49 ]
VC 7.1以降だと文書化されている。
msdn.microsoft.com/en-us/library/c9ceah3b.aspx

あるオブジェクトについて、同時読取り可、単一スレッドの書込み可。
同時書込みや読み書き同時は不可。
スレッドごとに別のオブジェクトを読み書きするのは問題ない。
例外的にストリーム出力は同時書込み可。

541 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:19:18 ]
テンプレートライブラリはクラスのマクロみたいなもんですよね?
コンパイル時に全部展開されるので多用する場合はメモリを無駄に消費しそうなんですが、
比較的大規模なアプリを作るときは、やはりコンパイル済みのライブラリを使うべきなんでしょうか?
例えばMFCとSTLはどのように使い分けるのが賢いんでしょうか。

542 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:48:06 ]
同じテンプレートを同じ型で別の場所でインスタンス化した場合はリンカが重複を除去する場合が多い
なので、規模が大きくなるほどテンプレートのオーバーヘッドの割合は減少すると思う

MFCとSTLでは重複するのはコンテナくらい
コンテナはSTLの方が大分出来が良いので、基本的にコンテナはSTLのを使えば良いと思う
MFCにべったり近い処理をするときなどは専用のコンテナが使いやすいこともあるかもしれない

結局はケースバイケースかな

543 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:08:54 ]
>リンカが重複を除去する場合が多い
重複除去は仕様。必ず行われる。

544 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 23:22:41 ]
重複除去しないとstatic変数のユニーク性が保証されなくなる。

545 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 06:04:20 ]
>>541
例えば CODE セグメントとか .text セクションが 10 倍になって困るのか?
一割り増しでも困るなら、使うのをやめというたほうがいいだろう。

なんというか、なんでもいいから毎月雑誌読もう。二年もするとだいぶ変わる。

546 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 07:27:13 ]
コピペ思い出した

547 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 12:17:37 ]
boostで重いやつ(regex、spiritなど)を多用するとメモリ不足になる(VC++なら/Zm指定要求してくる)
さらに酷いとコンパイラやリンカが落ちる。
STLレベルならそこまでのことにはならないが、テンプレートの副作用だな。

548 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 12:21:04 ]
lambdaなんか使うとtypoが原因でコンパイラが落ちるからなw



549 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:25:01 ]
それはメモリ不足とは別。

550 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:27:32 ]
なぜstringを使わない?

552 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:43:05 ]
>>550
vectorの内部バッファの連続性は規格で保証されているのでok
>>551
現時点ではstringの内部バッファの連続性は保証されてなかった気がする。

553 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:44:54 ]
別に連続性云々じゃなくて……
まあいいや。

554 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:54:28 ]
文字配列でない配列にstringを使う方が頭おかしいだろ
そんなコードさわりたくねえ

555 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 09:57:50 ]
vector<char>って書いて有るじゃん

556 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:24:53 ]
std::string str=string(&(TestV[0]));
std::cout<<str<<std::endl;
とでも書かないと満足できない人なんだよ、きっと。

557 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 17:11:20 ]
>>553
「まぁいい」って、>>551を書いた根拠がまさにそれで、
立場が無くなって言葉濁してるだけでしょ?w

558 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:17:31 ]
も前らおちつくんだ



559 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:31:26 ]
&(TestV[0])でポインタ得るのはどうよ


560 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 18:39:25 ]
&TestV[0]

561 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 20:31:27 ]
&*TestV.begin() ならマジックナンバーが現れなくていい

とか言いたいのかな

562 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:31:08 ]
vector::data()はまだ規格に入ってないんだっけ?

563 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:13:29 ]
>>562
C++0x

564 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 23:33:58 ]
自分用のライブラリで、
2箇所でSTLを取り入れただけで、.libのファイルサイズが3倍になったんだけど
テンプレート導入でサイズ急膨張って常識なんすか?

565 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 00:08:32 ]
:テンプレートは結局、自動的にコードを生成する機能といえるのでうまく使わないと予想外にコードが大きくなる。

566 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 00:27:48 ]
STLを使うとコードが10倍に?

567 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 00:28:44 ]
>>564
デバッグ情報じゃねーの?

568 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 02:42:07 ]
元のライブラリが10KByteで30KByteになったとかだったら驚かない。
3MByteが9MByteになったとかだったら、なにやったんだよと思う。



569 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 02:46:15 ]
シンボル情報削れば大したことにならんと思うが

570 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 10:31:54 ]
OSもコンパイラもそれらのバージョンも言わずに3倍とな!?

571 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 12:38:03 ]
コンパイラはg++です

572 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 12:50:12 ]
VC++でexpressive入れた途端に未最適化コードとmapファイルが1MB増えた覚えはある

573 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 21:44:52 ]
>>561
そこは &TestV.front() だろ・・・常考。

574 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 02:04:01 ]
STLスレだけにテンプレ通りの話をしてるのですね

575 名前:デフォルトの名無しさん [2008/05/28(水) 22:48:49 ]
template<class T>
class ListEx
{
list<T> m_list;
list<T>::iterator m_itr;
};

iterator の行でエラーになります。
何がいけないのでしょうか?

576 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:52:47 ]
typename list<T>::iterator m_iter;


577 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 22:57:16 ]
>>576
ありがとうございます
エラーは出なくなりました。

でも、 typename がなぜ必要なのかわかりません。
どこを調べたらいいのでしょうか?

578 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:14:34 ]
>>577
一度、Effective STLを読んでおいた方がいいんじゃないか?



579 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:20:22 ]
>>577
www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=C%2B%2B+template+typename&num=50

580 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:22:34 ]
型なのかメンバ変数なのかハッキリしろコラァ!
とコンパイラが怒るから

581 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:23:16 ]
この文脈では list<T>::iterator のTは型に決まってるだろ、と小1時間ほど問い詰めてやりたい


582 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 10:31:12 ]
Tじゃなくて、iteratorが型かどうかわからない。

583 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 11:24:32 ]
template<typename T> struct list{ enum{ iterator = 0 }; };
だったらlist<T>::iteratorをする時にはtypenameの代わりに何が必要なのか

584 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 12:45:15 ]
>>583
何もいらない。
typenameがないときは、暗黙のうちに値として扱われるよ。例外もあるけど。

585 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 12:50:33 ]
>>581
実際VC++だとtypename無くても通るっぽい?
賢いというよりテンプレート宣言を読むときは「あーはいはい」って感じで
実際に型当てはめてからチェック開始してるのかね

586 名前:デフォルトの名無しさん mailto:sage [2008/05/29(木) 19:36:19 ]
>>582
なるほど、
typename list<T>::iterator m_iter;
は list<T>::iterator がタイプ名だとコンパイラに教えているのか
やっと納得できた


587 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 01:04:10 ]
C++続けるつもりなら読むべきものをまず読んどけ

588 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 02:06:07 ]
SICPですね、わかります



589 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 02:43:43 ]
SICPとはまた時代遅れの物を

590 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 22:33:28 ]
TR1のお勧め参考書おしえてくれ

591 名前:デフォルトの名無しさん mailto:sage [2008/05/30(金) 22:40:10 ]
>>590
つTechnical Report 1

592 名前:デフォルトの名無しさん [2008/05/31(土) 01:30:22 ]
ちょっと質問です。

STL辺りに「テーブルクラス」なんてありますか?
イメージとしては、データベースのテーブルをオブジェクトとして扱うクラスです。

result = DBDATA.summary(var1) ;
こんな感じです。

593 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 02:36:59 ]
>>590
EffectiveC++の第三版はtr1にちょっと触れてる

594 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 07:56:28 ]
>>592
イメージとしては、データベースのテーブルをオブジェクトとして扱う
クラスはない感じです。

595 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 12:12:08 ]
>>592
STLだけでやるなら、連想系コンテナとアルゴリズムを組み合わせる感じかね。

596 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 12:19:01 ]
>>590
とりあえずboost本買ってみるのは

597 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 14:49:33 ]
>>592
where句が限定されているならmapでいいんじゃないの?
っていうかDB的に使うなら普通にsqliteでも使った方が無難だよ。


598 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:20:14 ]
O/Rマッパーが欲しいんじゃね
DataSetとか



599 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:37:03 ]
mapは、要素の追加または削除を行ってもそれ以外の要素の参照は保たれたままな事が保証されていますか?

600 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:38:01 ]
追記です。要素への参照の他に、キーのについても同じ事が言えますか?

601 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 22:40:26 ]
自己解決しました。ありがとうございました。

602 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:09:11 ]
死ね

603 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:43:37 ]
死ねっていう奴と
死ねって言われた奴は
死ねばいいのに

604 名前:デフォルトの名無しさん mailto:sage [2008/06/03(火) 23:59:17 ]
そして伝説へ・・・

605 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 00:06:56 ]
死んでもそれ以外の人の参照は保たれたままな事が保証されていますか?

606 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 01:00:47 ]
死して屍拾う者なし、ってメモリリークのことですか?

607 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:44:19 ]
GC「骨くらいは拾っておいてやるよ」

608 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 08:45:30 ]
デストラクタ「生ける者の為の卒塔婆」



609 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:11:39 ]
std::mapのイテレータに順ずるものから、木構造の右部分木、左部分木をそれぞれ取得して
木を追跡したいんですが、そういうことは可能でしょうか?

610 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:13:10 ]
赤黒木使ってたら左部分木と右部分木だけとは限らないよ
アルゴリズムの本読んでみ

611 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:17:24 ]
>>609
std::map が木で実装されているとは限らないので、そういう操作は無い。

木の追跡(?)自体がやりたいわけじゃないと思うんだけど、結局のところ何がしたいの?

612 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:26:33 ]
>>611
upper/lower_boundで解決しました。

613 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:36:39 ]
やっぱり解決しませんでした。もういいです諦めます。STL死ね。

614 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 13:41:17 ]
お前が死ね

615 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 14:21:17 ]
すぐファビョる所を見ると朝鮮人か

616 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 14:23:03 ]
私が死ぬのであなた達は死ななくてもよいのです

617 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 15:05:12 ]
STLは生き物ではないので死ぬことはできません

618 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 15:18:03 ]
私のお墓の前で泣かないでください



619 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 15:46:50 ]
STLの考え方に頭が付いていかない所を見ると
頭が悪いかジジイかのどちらかだろう

620 名前:デフォルトの名無しさん mailto:sage [2008/06/04(水) 16:07:29 ]
お尋ねします。
vector<vector<bool>> TempA;
vector<vector<bool>>::iterator itr1;
vector<vector<bool>>::iterator itr2;
と宣言したとします。
itr1 = TempA.begin();
itr2 = TempA.begin();
としたのち、
TempAのたとえば2行目と3行目の中身すべてを比較したいとき、
itr1++;itr2 += 2;としてiteratorを進めて、
*itr1 == *itr2の比較を一度行えばいいのでしょうか?
それとも、各行でiteratorを作成して、
各行ベクトルの列座標に対応したiteratorを回す必要がありますか?

p.s.この動作のあと、一致している行を、
itr2=Temp.erase(itr2);
みたいに削除したいのです。






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

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

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