【C++】STL(Standard Template Library)相談室 2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG【C++】STL(Standard Template Library)相談室
http://pc5.2ch.net/test/read.cgi/tech/1095583235/
関連スレなどは>>2以降で
0478デフォルトの名無しさん
2005/04/27(水) 18:26:13>ストリームってSTLじゃないんだっけ。
まったくもって違う。
つか、STL なんていう呼称に何か意味があるのか?
0479デフォルトの名無しさん
2005/04/27(水) 18:39:150480デフォルトの名無しさん
2005/04/27(水) 22:04:51#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <functional>
bool ToInt(char c, int *n)
{
if (!std::isdigit(c))
return true;
*n *= 10;
*n += c - '0';
return false;
}
int main()
{
int Num = 0;
std::string str = "200";
std::find_if(str.begin(), str.end(), std::bind2nd(std::ptr_fun(ToInt), &Num));
std::cout << Num << std::endl;
return 0;
}
BCCのSTLはToInt()の引数をint&にすると参照へのポインタは作れないと言いやがる。Boostなら平気だったが。
std::find_if(str.begin(), str.end(), boost::bind(ToInt, _1, boost::ref(Num)));
0481デフォルトの名無しさん
2005/04/27(水) 22:29:05いつもはboost::lambdaの方を使ってるんだけど。
0482デフォルトの名無しさん
2005/04/27(水) 22:43:04boost::lambdaは無名関数作成。
boost::bindは>>480のように2引数関数オブジェクトから1引数関数オブジェクトを作ったりするのに使う。
0483デフォルトの名無しさん
2005/04/27(水) 23:22:150484デフォルトの名無しさん
2005/04/28(木) 01:30:10boost 1.32 だと boost::lambda::bind よりも boost::bind の方が適用範囲が
広い。確か intrusive_ptr を使ってると lambda の方はうまく動かなかった
ような気がする。
0485デフォルトの名無しさん
2005/04/28(木) 02:05:09あんまり答えになってないんじゃないか? それはさておき、俺は
boost::lambda::bindとintrusive_ptrを使ってるけど別に困ってないけどな。
俺の経験ではboost::bindはlambdaと混用できなくて、
必然的にboost::lambda::bindを使う方が多い。
0486デフォルトの名無しさん
2005/04/28(木) 21:53:380487デフォルトの名無しさん
2005/04/28(木) 22:49:52便利だと思うんだけど。
0488デフォルトの名無しさん
2005/04/29(金) 00:50:380489デフォルトの名無しさん
2005/04/29(金) 01:26:530490デフォルトの名無しさん
2005/04/29(金) 10:05:350491デフォルトの名無しさん
2005/04/29(金) 10:57:120492デフォルトの名無しさん
2005/04/29(金) 11:03:470493デフォルトの名無しさん
2005/04/29(金) 12:09:40STL 以前に、コンピュータサイエンスで使われてた単語をそのまま
持ってきただけかと。そもそも boost::lambda のラムダも、λ計算
そのままだし。
0494デフォルトの名無しさん
2005/04/29(金) 12:17:260495デフォルトの名無しさん
2005/04/29(金) 12:38:550496デフォルトの名無しさん
2005/04/29(金) 12:41:310497デフォルトの名無しさん
2005/04/29(金) 13:51:070498デフォルトの名無しさん
2005/04/29(金) 14:01:390499デフォルトの名無しさん
2005/04/29(金) 14:43:260500デフォルトの名無しさん
2005/04/29(金) 14:57:020501デフォルトの名無しさん
2005/04/29(金) 16:42:560502デフォルトの名無しさん
2005/04/29(金) 16:58:320503デフォルトの名無しさん
2005/04/29(金) 17:10:16グッドセンスな名前はまだか?
0504デフォルトの名無しさん
2005/04/29(金) 23:49:14お前が馬鹿なだけ。
0505デフォルトの名無しさん
2005/04/30(土) 00:11:35理由は何ですか?
0506デフォルトの名無しさん
2005/04/30(土) 00:16:23>>489
STLのbind1st、bind2ndは引数に束縛という意味でbindをそのまま持ってきたわけだが、
boost::bindについてまで束縛を「そのまま持ってきた」と言えるかというと疑問だ。
0507デフォルトの名無しさん
2005/04/30(土) 00:16:38単に拡張にせよ縮小にせよ、ポインタが指している先の面倒を自分でみる必要があるだけで。
0508デフォルトの名無しさん
2005/04/30(土) 01:20:320509デフォルトの名無しさん
2005/04/30(土) 03:27:20そいつに聞け。
0510デフォルトの名無しさん
2005/04/30(土) 07:26:01vectorを使って、動的に確保したメモリ領域のアドレスを管理するのに、
どこもポインタからunsigned longとかunsigned intとかに変換してるのですが、
直接ポインタ型でvectorを使っても何もダメなことって無いですよね?
ポインタ型だって結局はunsigned longとかと同じ数値なんだし・・・
0511デフォルトの名無しさん
2005/04/30(土) 07:53:51そこで語源が固有名詞な専門用語持ってくるのも嫌な感じだな。
curry(apple, honey) とかも嫌だろ。
ついでに、調べてる最中にこんなんも拾った。
http://mail.python.org/pipermail/python-dev/2004-February/042660.html
曰く、
"Curry is a one argument function that accepts a function and returns a new function"
だそうだ。
0512デフォルトの名無しさん
2005/04/30(土) 07:56:00どこでや。
>ポインタ型だって結局はunsigned longとかと同じ数値なんだし
sizeof(long*) == 8
sizeof(long) == 4
という環境もあるわけですが…
0513デフォルトの名無しさん
2005/04/30(土) 07:57:28数値に変換しているのは、ポインタ型それぞれに
テンプレートのインスタンス化が起こるのを嫌ってるんだろう。
ただ、そこで整数型で置き換えるのは間違いで void* ぐらいにしておくべき。
ポインタ型でvectorを使うのは全く問題ないが、
問題ない理由としてポインタが数値であるという認識は間違い。
0514デフォルトの名無しさん
2005/04/30(土) 08:04:14あぁいや、サイズが同じというんじゃなくて、結局は数値なんだしってことで
>>513
でも、データ上数値であることに変わりないと思うのですが
じゃあ、どういった理由で問題無いのでしょう?
0515デフォルトの名無しさん
2005/04/30(土) 08:38:51頭悪そうですね…
0516513
2005/04/30(土) 08:48:02数値であっても、サイズが同じじゃないと問題が起こることぐらいわかるよな?
ポインタ型でvectorを使うのが問題ない理由は、ポインタ型が
vectorのテンプレート引数として要求される条件を全て満たしているから。
0517デフォルトの名無しさん
2005/04/30(土) 10:24:410518デフォルトの名無しさん
2005/04/30(土) 10:54:130519デフォルトの名無しさん
2005/04/30(土) 18:36:36すなわち「うんこ味のカレー」はうんこそのものである。
また、「カレー味のうんこ」はたとえ見た目がうんこそっくりでも、
カレーそのものかもしれないという可能性がまだ残されている。
しかし、「うんこ」と断言されている以上、危険性は賭けである。
これ以上は1/2の確率と「運」に任せるしかない。
ゆえに、選ぶとしたら「カレー味のうんこ」だ!
0520デフォルトの名無しさん
2005/04/30(土) 18:44:01それは「カレー味」とは、どの程度の質レベルなのか、という問題である。
もしもうんこが1%でもブレンドされていたらおれの敗北である。
「カレー味」と表記されたからといって、原料が100%すべてカレー
である確率は残念ながらとても低いだろう。
最後に「うんこ」と断言されていることを忘れてはならない。
おれはまた、思考の渦に入り込んでしまった様だな。
0521デフォルトの名無しさん
2005/04/30(土) 18:45:030522デフォルトの名無しさん
2005/04/30(土) 18:53:140523デフォルトの名無しさん
2005/04/30(土) 20:50:030524デフォルトの名無しさん
2005/04/30(土) 21:04:010525デフォルトの名無しさん
2005/04/30(土) 21:52:06スカトロって、誰が出したのかも判らない様なうんこでも食えるもんなの?
0526デフォルトの名無しさん
2005/04/30(土) 22:10:420527デフォルトの名無しさん
2005/05/01(日) 03:35:590528デフォルトの名無しさん
2005/05/01(日) 06:58:44(「究極の選択」コーナー) って18年くらい前だっけ?
息の長いネタだ<カレー味の運子
0529デフォルトの名無しさん
2005/05/03(火) 03:17:290530デフォルトの名無しさん
2005/05/03(火) 03:31:200531デフォルトの名無しさん
2005/05/03(火) 06:00:160532デフォルトの名無しさん
2005/05/03(火) 07:28:550533デフォルトの名無しさん
2005/05/03(火) 07:32:470534デフォルトの名無しさん
2005/05/03(火) 08:11:01http://www.unsymmetry.org/up3d/files/1112701802518.jpg
0535デフォルトの名無しさん
2005/05/04(水) 13:49:330536デフォルトの名無しさん
2005/05/04(水) 13:55:470537デフォルトの名無しさん
2005/05/04(水) 14:21:52もっとC++的なやり方はありませんか?
0538デフォルトの名無しさん
2005/05/04(水) 14:27:450539デフォルトの名無しさん
2005/05/04(水) 14:30:560540デフォルトの名無しさん
2005/05/04(水) 14:44:19std::string str(number, ' ');
>>539
遅くない?
0541デフォルトの名無しさん
2005/05/04(水) 14:47:100542デフォルトの名無しさん
2005/05/04(水) 14:51:10そういう時の代替案はなんだろう?printf?
0543デフォルトの名無しさん
2005/05/04(水) 14:54:20C++使うのやめれ
0544デフォルトの名無しさん
2005/05/04(水) 14:56:57wsprintf
0545デフォルトの名無しさん
2005/05/04(水) 14:59:58string str="aaa"+string(x)+"bbb";
みたいなことが出来るような文字列クラスはありませんか?
0546デフォルトの名無しさん
2005/05/04(水) 15:15:200547デフォルトの名無しさん
2005/05/04(水) 15:26:200548デフォルトの名無しさん
2005/05/04(水) 15:56:01reinterpret_cast<std::string>
0549デフォルトの名無しさん
2005/05/04(水) 21:19:450550デフォルトの名無しさん
2005/05/04(水) 21:25:540551デフォルトの名無しさん
2005/05/04(水) 22:23:58boost::lexical_cast()
0552デフォルトの名無しさん
2005/05/04(水) 23:03:02STL の意味を知らないからこそこのスレに来るんじゃなかろうかと。
0553デフォルトの名無しさん
2005/05/04(水) 23:18:27"標準的"手法
#include <iostream>
#include <sstream>
int main()
{
double d = 1.2345;
std::stringstream ss;
std::string str;
ss << d;
ss >> str;
std::cout << str;
}
0554デフォルトの名無しさん
2005/05/05(木) 00:14:19orzとSTL
0555デフォルトの名無しさん
2005/05/05(木) 00:15:12そうなんだけど。
だからこのスレいらないんだよ。
0556デフォルトの名無しさん
2005/05/05(木) 00:19:15例えば俺とか
0558デフォルトの名無しさん
2005/05/05(木) 00:44:210559デフォルトの名無しさん
2005/05/05(木) 02:38:55STLちゃうやん
0561デフォルトの名無しさん
2005/05/05(木) 02:53:460562デフォルトの名無しさん
2005/05/05(木) 02:58:39取り込まれてしまった今となっては明確に区切れる物では無い。
HP STL や SGI STL のことを指して言ってるのかもしれないが、
今使われてるのはそれらをベースにしたC++標準ライブラリだ。
範囲が明確に決まってるかのように、含まれるだの含まれないだの言うのは時代遅れだぞ。
このスレが不要である事に疑いの余地は無い。
0563デフォルトの名無しさん
2005/05/05(木) 03:08:02根強く残っているから混乱しちゃうんだな。
呼称は「標準ライブラリ」で統一されるといいんだけど。
0564デフォルトの名無しさん
2005/05/05(木) 03:17:35標準ライブラリじゃなくてテンプレートライブラリ
0565デフォルトの名無しさん
2005/05/05(木) 03:29:050566デフォルトの名無しさん
2005/05/05(木) 06:39:300567デフォルトの名無しさん
2005/05/05(木) 07:05:530568デフォルトの名無しさん
2005/05/05(木) 07:19:560569デフォルトの名無しさん
2005/05/05(木) 07:30:48はかってみたら5倍程度遅くなったんです。これってふつうですか?
0570デフォルトの名無しさん
2005/05/05(木) 07:53:23アクセス毎に境界チェックが入るということ等から見当がつきそうなものだが。
見当がつかなかったらコンパイラにアセンブラソースを吐かせて自分で比較すれ。
0571デフォルトの名無しさん
2005/05/05(木) 08:39:120572デフォルトの名無しさん
2005/05/05(木) 09:00:21速度が気になるのならboost::arrayをどうぞ。
0573デフォルトの名無しさん
2005/05/05(木) 09:02:38普通に全件表示を書いたら配列とvectorでは速度が変わらなかったんです。
普通にstd::find()を使ってもstd::accumurate()を使っても同じ速度だし。
どうやったらvectorを遅く動かせるんでしょうか。
0574デフォルトの名無しさん
2005/05/05(木) 09:07:12vectorは動的にメモリを確保するから、普通の配列に比べコンストラクタ・デストラクタに時間が掛かる。
0575デフォルトの名無しさん
2005/05/05(木) 10:45:100576デフォルトの名無しさん
2005/05/05(木) 10:48:22それでも普通の配列より時間がかかる
0577デフォルトの名無しさん
2005/05/05(木) 11:23:36operator[]()は境界チェックをしないわけだが。
■ このスレッドは過去ログ倉庫に格納されています