【C++】STL(Standard Template Library)相談室 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/10/30(日) 22:51:04http://pc8.2ch.net/test/read.cgi/tech/1116559700/
【C++】STL(Standard Template Library)相談室 2
http://pc8.2ch.net/test/read.cgi/tech/1104898734/
【C++】STL(Standard Template Library)相談室
http://pc5.2ch.net/test/read.cgi/tech/1095583235/
入門ページなど
ttp://www.wakhok.ac.jp/~sumi/stl/
ttp://www.jah.ne.jp/~naoyuki/Writings/STL.html
ttp://e-words.jp/w/STL.html
ttp://www5c.biglobe.ne.jp/~ecb/cpp/07_01.html
ttp://www.nantekotta.com/stl.html
ttp://www.s34.co.jp/cpptechdoc/reference/stl_samples/
ttp://www.kab-studio.biz/Programing/STLiostream/
ttp://www.itmedia.co.jp/dict/programming/language/kind/c/01486.html
ttp://ja.wikipedia.org/wiki/Standard_Template_Library
ttp://www.shibu.jp/cppreference/cpp_stl.html
ttp://www-ise2.ise.eng.osaka-u.ac.jp/~iwanaga/programming/stl/about_stl.html
マルチスレッドプログラミングの時には、
ttp://www.logos.ic.i.u-tokyo.ac.jp/~yokoyama/trash/stl_thread.html
STLPort
http://www.sgi.com/tech/stl/
http://www.stlport.org/
関連スレ、その他リンクは >>2-9 ぐらい
0446デフォルトの名無しさん
2005/12/17(土) 20:40:22>>439の正しさが確認されないことには、
議論が進まないのでなるべく早目にお願いします。
0447デフォルトの名無しさん
2005/12/17(土) 20:44:06多分、3.は必要ないから、無限ループには陥らない。
0448デフォルトの名無しさん
2005/12/17(土) 20:55:040449デフォルトの名無しさん
2005/12/17(土) 20:59:41c_str()に対するdata()のパフォーマンス優位性も一切確認されていない。
全ては信者の脳内にしか存在しない。
0450デフォルトの名無しさん
2005/12/17(土) 21:07:02俺の知っている実装は全て、data()とc_str()は同じものを返すよ。
data()の時も実は'\0'で終端されているという…
0451デフォルトの名無しさん
2005/12/17(土) 21:13:43size() == 0の時少し振る舞いが違うぞ。
まあ多くの実装で返ってくるものは同じだが(w
0452デフォルトの名無しさん
2005/12/17(土) 21:14:32・ヌル終端保証
・"c_str"というキーワードが他であまり使われないので、文字列検索が"data"に比べて簡単
data()のc_str()に対する優位性
・不明
0453デフォルトの名無しさん
2005/12/17(土) 21:15:150454デフォルトの名無しさん
2005/12/17(土) 21:17:31そこでstringstream::str()を引き合いに出してくる理由がわからない。
0455デフォルトの名無しさん
2005/12/17(土) 21:19:15・ソース内にc_str()と混在させることにより難読性を高めて、他のプログラマがコピペしにくくする著作権保護効果。
0456デフォルトの名無しさん
2005/12/17(土) 21:23:13己の経験不足を報告するスレじゃないはずだぞ。
0457デフォルトの名無しさん
2005/12/17(土) 21:32:220458デフォルトの名無しさん
2005/12/17(土) 21:33:10> data()のc_str()に対する優位性
Cスタイルの文字列を必要としている局面でないことが明確。
0459デフォルトの名無しさん
2005/12/17(土) 21:44:240460デフォルトの名無しさん
2005/12/18(日) 00:07:210461デフォルトの名無しさん
2005/12/18(日) 00:12:32一気に実行ファイルサイズが10倍になります。
0462デフォルトの名無しさん
2005/12/18(日) 00:14:24別世界が開ける。
0463デフォルトの名無しさん
2005/12/18(日) 00:48:02環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0464デフォルトの名無しさん
2005/12/18(日) 00:57:46はいはい、他スレのテンプレわろすわろす
0465デフォルトの名無しさん
2005/12/18(日) 00:57:490466デフォルトの名無しさん
2005/12/18(日) 01:03:050467not 463
2005/12/18(日) 01:03:25「実行ファイルのサイズが10倍になる」を受けてるレスだから。
0468デフォルトの名無しさん
2005/12/18(日) 01:12:090469デフォルトの名無しさん
2005/12/18(日) 01:30:19ワロスwwwww
0470デフォルトの名無しさん
2005/12/18(日) 01:36:260471デフォルトの名無しさん
2005/12/18(日) 01:45:390472デフォルトの名無しさん
2005/12/18(日) 02:03:260473デフォルトの名無しさん
2005/12/18(日) 05:32:510474デフォルトの名無しさん
2005/12/18(日) 07:27:07あの時点で注目されているのはテンプレートのコード生成に伴うサイズ増量であって、
Cランタイムがどのようにリンクされようがテンプレートと何の関係もない。
むしろ動的リンクの方がテンプレートによる増量がわかりやすいかもしれない。
0475デフォルトの名無しさん
2005/12/18(日) 07:31:10|:::::::| ,,,,,_ ,,,,,,|
|r-==( 。);( 。)
( ヽ :::__)..:: }
,____/ヽ ー== ; ほほう それでそれで?
r'"ヽ t、 \___ !
/ 、、i ヽ__,,/
/ ヽノ j , j |ヽ
|⌒`'、__ / / /r |
{  ̄''ー-、,,_,ヘ^ |
ゝ-,,,_____)--、j
/ \__ /
| "'ー‐‐---''
0476デフォルトの名無しさん
2005/12/18(日) 07:48:26MBSやsurrogateやらの対応が甘そうだったので自前で作った
0477デフォルトの名無しさん
2005/12/18(日) 08:06:26MBS対応メソッドを追加すればすむだけなのに。
0478デフォルトの名無しさん
2005/12/18(日) 09:40:48非仮想デストラクタだし、スライスも怖いし……。
0479デフォルトの名無しさん
2005/12/18(日) 10:03:16非仮想デストラクタの心配は杞憂。
別のスコープで作られた派生クラスインスタンスを
基底クラスのポインタで破棄すべき状況が、
果たして文字列クラスで起こりうるかどうか考えよう。
ポインタを使いたくないからクラス化しているのに本末転倒な状況だ。
また、STLのコンテナやアルゴリズムがテンプレートを用いており、
継承をあえて使っていない理由についても考えよう。
ところで、「スライス」とは何?
0480デフォルトの名無しさん
2005/12/18(日) 11:36:17基底クラスへのスライシングだろ。
非仮想デストラクタの場合と心配してるところの根は同じだと思う。
0481デフォルトの名無しさん
2005/12/18(日) 11:40:33> ポインタを使いたくないからクラス化しているのに本末転倒な状況だ。
そんなあほな。
0482デフォルトの名無しさん
2005/12/18(日) 11:58:05スライスが動詞でスライシングが動名詞だということだけはわかりました。本当にありがとうございました。
>>481
そういうもんですか?
自分でバッファを確保・解放するなら、
文字列クラスじゃなくて生のchar*でいい気がするけど、どうでしょうか。
暗黙のうちに解放されるコンテナの場合、>>479が触れているとおりテンプレートだし。
だめ?
0483デフォルトの名無しさん
2005/12/18(日) 12:40:100484デフォルトの名無しさん
2005/12/18(日) 12:46:34std::wstringは?
>>477
char_traitsの自作は?
0485デフォルトの名無しさん
2005/12/18(日) 14:40:45いや、マジで。
0486デフォルトの名無しさん
2005/12/18(日) 14:55:540487デフォルトの名無しさん
2005/12/18(日) 15:01:58>std::wstringは?
ワイド文字列の罠
ttp://hw001.gate01.com/eggplant/tcf/cpp/wchar_t_trap.html
0488デフォルトの名無しさん
2005/12/18(日) 15:34:130489デフォルトの名無しさん
2005/12/18(日) 18:40:23それAPIやライブラリ関数呼び出しの度にchar*またはwchar_t*に
変換せなあかんのか
最悪じゃん
0490デフォルトの名無しさん
2005/12/18(日) 19:28:16UTF-16をwstringに格納することに比べどんな利点があるのか?
0491デフォルトの名無しさん
2005/12/18(日) 21:56:360492デフォルトの名無しさん
2005/12/18(日) 22:04:080493デフォルトの名無しさん
2005/12/18(日) 22:51:030494デフォルトの名無しさん
2005/12/19(月) 09:49:59> また、STLのコンテナやアルゴリズムがテンプレートを用いており、
> 継承をあえて使っていない理由についても考えよう。
(゚Д゚)ハァ?
テンプレート関係ないやん
0495デフォルトの名無しさん
2005/12/19(月) 10:12:46> また、STLのコンテナやアルゴリズムがテンプレートを用いており、
> 継承をあえて使っていない理由についても考えよう。
(゚Д゚)ハァ?
テンプレート関係ないやん
0496デフォルトの名無しさん
2005/12/19(月) 11:18:52> また、STLのコンテナやアルゴリズムがテンプレートを用いており、
> 継承をあえて使っていない理由についても考えよう。
(゚Д゚)ハァ?
テンプレート関係ないやん
0497デフォルトの名無しさん
2005/12/20(火) 21:18:46> また、STLのコンテナやアルゴリズムがテンプレートを用いており、
> 継承をあえて使っていない理由についても考えよう。
(゚Д゚)ハァ?
テンプレート関係ないやん
0498デフォルトの名無しさん
2005/12/20(火) 21:37:00> また、STLのコンテナやアルゴリズムがテンプレートを用いており、
> 継承をあえて使っていない理由についても考えよう。
(゚Д゚)ハァ?
テンプレート関係ないやん
0499デフォルトの名無しさん
2005/12/20(火) 22:42:51> また、STLのコンテナやアルゴリズムがテンプレートを用いており、
> 継承をあえて使っていない理由についても考えよう。
(゚Д゚)ハァ?
テンプレート関係ないやん
0500デフォルトの名無しさん
2005/12/20(火) 23:23:51500は頂いとくよ
0501デフォルトの名無しさん
2005/12/20(火) 23:26:28STL使ったら直ぐに出来上がった。
今まで食わず嫌いしてて損したよママン。
0502デフォルトの名無しさん
2005/12/20(火) 23:47:060503デフォルトの名無しさん
2005/12/20(火) 23:59:430504デフォルトの名無しさん
2005/12/21(水) 00:08:58mapのlistとか、vectorのmapとか。
setはあんまり出番なさそうだけど。
0505デフォルトの名無しさん
2005/12/21(水) 00:10:530506501
2005/12/21(水) 00:16:04で、結局push_frontでダミーを一定量確保したら一旦clearするようにタスクのファクトリを作ってみた。
push_back等で一定量確保した後で、eraseやclearを使った後は、前に確保した領域は使い回されている保障はあるのかな。
誰か詳細キボン。
0507デフォルトの名無しさん
2005/12/21(水) 00:18:580509デフォルトの名無しさん
2005/12/21(水) 00:31:08そういうのはvectorだけじゃね?
reserve()があるのはvectorだけだし。
0510デフォルトの名無しさん
2005/12/21(水) 01:18:42安心できると思ったけど結構めんどいね。
0511デフォルトの名無しさん
2005/12/21(水) 01:34:11reserve()はアロケータの呼び出し自体を抑えて、動的メモリの再確保回数を減らす方法。
listで似たような事をしたければ自前アロケータの内部で似たようなことをするように作れ、と言うこと。
0512デフォルトの名無しさん
2005/12/21(水) 04:40:22した。ケースバイケースだけど、こちらの方がわずかに速くなる場合がある。
逆に遅くなる事もある。環境や用途にも大きく左右されると思うので、
各自実験してみて欲しいが、なかなか面白いる
0513デフォルトの名無しさん
2005/12/21(水) 05:02:50いらん
0514デフォルトの名無しさん
2005/12/21(水) 05:11:03そんなに責めるなよーorz
0515デフォルトの名無しさん
2005/12/21(水) 07:04:20作らないでもいろいろある。
0516デフォルトの名無しさん
2005/12/21(水) 13:55:28それを聞きたいいる
0517デフォルトの名無しさん
2005/12/21(水) 15:08:20string型なのですが、char型配列→string型はもちろんできます。
逆も「読み取り専用」なら str.c_str(); で出来たのですが、string型に直接値を入れるのはできないのでしょうか。(設計思想的にできないのかなと思ってます)
例えば
strcpy(str.hoge(), "こんにちは");
なんて真似です。
作ってるアプリケーションでGetOpenFileNameを使っているのですが、
一旦char配列にファイルパスを受け取らせ、その後pathを保存しておくためのstring型に変換するべきなのでしょうか。
0518デフォルトの名無しさん
2005/12/21(水) 16:37:52std::string hoge;
hoge = "こんにちは"
ならできるよ?
0519デフォルトの名無しさん
2005/12/21(水) 16:44:07それは = 代入演算子が使われているからですよね。
それではなく
sprintf(str.c_str(), "%d", 5);
などが出来ないかなと思いまして。
↑これ自体はやっちゃいけないらしいですけど、他でこの想定にかなう方法はあるのかなと。
Win32APIなどでは、char*を引数で渡して中身を入れてもらうAPIも多くあるので…。
0520デフォルトの名無しさん
2005/12/21(水) 16:48:31ポインタを渡してそこに書いてくれるような。
0521520
2005/12/21(水) 16:49:51で、WinAPIを使いたいだけならCStringという妥協でも委員でないの?
0522デフォルトの名無しさん
2005/12/21(水) 17:41:27ありがとうございました。
0523デフォルトの名無しさん
2005/12/21(水) 18:08:180524デフォルトの名無しさん
2005/12/21(水) 18:42:47fgets -> getline
とか、代替のものがあるので、それを使うのが一番じゃないかな。
0525デフォルトの名無しさん
2005/12/21(水) 18:59:21WinAPIで使いたい、って書いてあるやん。
0526デフォルトの名無しさん
2005/12/21(水) 20:03:24みたいな関数をでっち上げればいい。
0527デフォルトの名無しさん
2005/12/21(水) 20:27:500528デフォルトの名無しさん
2005/12/21(水) 20:29:260529デフォルトの名無しさん
2005/12/21(水) 21:17:490530デフォルトの名無しさん
2005/12/21(水) 21:21:00WinAPI相手ならstd::vector<TCHAR>で我慢してくれ。
0531デフォルトの名無しさん
2005/12/21(水) 21:46:120532デフォルトの名無しさん
2005/12/21(水) 21:50:43俺は(略)
0533デフォルトの名無しさん
2005/12/21(水) 21:57:570534デフォルトの名無しさん
2005/12/21(水) 23:27:46後(略)
0535デフォルトの名無しさん
2005/12/21(水) 23:34:43望みは捨てるな。
http://pc8.2ch.net/test/read.cgi/tech/1133007604/469-470n
469デフォルトの名無しさん2005/12/21(水) 06:05:51
http://www.open-std.org/jtc1/sc22/wg21/
News 2005-12-19: The 2005-12 mailing is available (1600 kb tar.gz, .zip 1600 kb) individual papers
News 2005-12-17: The C++ Standard Library Issues List (Revision 40) is available (.tar.gz)
News 2005-12-17: C++ Standard Core Language Issues List (Revision 39) is available, also committee version
470デフォルトの名無しさんsage2005/12/21(水) 10:29:39
うげっ、std::string<>もメモリ上の連続性を仮定するようになるのかよ。
0536http://pc8.2ch.net/test/read.cgi/tech/1133007604/470
2005/12/22(木) 02:30:13恥ずかしいから貼らないでくれorz
0537デフォルトの名無しさん
2005/12/22(木) 02:39:38hage[0] = 'ウ';
いまでもこれならできたりする。
0538デフォルトの名無しさん
2005/12/22(木) 02:53:200539デフォルトの名無しさん
2005/12/22(木) 10:17:18いやっほーう!
0540デフォルトの名無しさん
2005/12/22(木) 10:35:35> 530. Must elements of a string be contiguous?
> (中略)
> The characters in a string are stored contiguously, meaning that if
> s is a basic_string<charT, Allocator>, then
> it obeys the identity
> &*(s.begin() + n) == &*s.begin() + n
> for all 0 <= n < s.size().
か。
0541デフォルトの名無しさん
2005/12/23(金) 00:19:34std::string location;
sprintf(capture_string(&location), "<%s>#%d", __FILE__, __LINE__);
0542デフォルトの名無しさん
2005/12/23(金) 05:38:160543デフォルトの名無しさん
2005/12/23(金) 14:25:28ちょっとタイミング外したけど、>>519 に対してのレス。
0544デフォルトの名無しさん
2005/12/23(金) 18:14:090545デフォルトの名無しさん
2005/12/23(金) 18:17:10■ このスレッドは過去ログ倉庫に格納されています