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

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2006/10/12(木) 21:46:40
basic_stringはSTLではない。
STLはコンテナ、アルゴリズム、イテレータから成っている。
したがって、basic_stringはコンテナではない。
953デフォルトの名無しさん:2006/10/12(木) 21:47:12
basic_string→コンテナ
string→not コンテナ
954デフォルトの名無しさん:2006/10/12(木) 21:48:59
>>952
その論理だとboost::reverce_iteratorはiteratorじゃないんですか?
955デフォルトの名無しさん:2006/10/12(木) 21:50:41
さっきからくだらないこと言ってる奴は標準コンテナと自作コンテナの区別ぐらいつけろ。
956デフォルトの名無しさん:2006/10/12(木) 21:55:56
俺定義のSTLなんてどうでもいいよ
957デフォルトの名無しさん:2006/10/12(木) 22:11:40
STLとかコンテナとか気にせず、
ただ使いこなせればそれでいいとおもうんだが。
知識偏重主義ってうざいよ。
958デフォルトの名無しさん:2006/10/12(木) 22:30:08
basic_stringをSTLコンテナだと思って使ってると微妙に足りないメンバ関数があっていらついてくる。
959デフォルトの名無しさん:2006/10/12(木) 22:36:11
今日はどしたんだ?
960デフォルトの名無しさん:2006/10/12(木) 22:41:10
>>956
俺定義のSTLって?
961デフォルトの名無しさん:2006/10/12(木) 23:04:57
>>952
別にSTLに含まれていなくても、要件さえ満たしていれば、
コンテナやらイテレータを名乗るのは全く問題ないと俺は思うんだ。
962デフォルトの名無しさん:2006/10/12(木) 23:11:38
>>961
コンテナやらイテレータを名乗る≠(標準)コンテナや(標準)イテレータである
これを理解して言っているのなら別に構わないんじゃないかな?
ライブラリを自作して公開する時に、これは自作コンテナですとか
イテレータの要件を満たした代物ですなんていうのはめんどくさいしね。
963デフォルトの名無しさん:2006/10/12(木) 23:21:00
全部自作自演に見える
964デフォルトの名無しさん:2006/10/12(木) 23:22:03
しかしてここまで俺の自演
965932:2006/10/13(金) 00:19:45
C++0xでは、conceptが規格に載ると思うので、
要求仕様ベース型のカテゴライズに慣れてください。
もともとC++はそういうものだったんですが、conceptでさらに整理されました。

Concepts for the C++0x Standard Library: Containers
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2085.pdf

Concepts (Revision 1)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2081.pdf
Concepts for the C++0x Standard Library: Utilities (Revision 1)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2082.pdf
Concepts for the C++0x Standard Library: Iterators (Revision 1)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2083.pdf
Concepts for the C++0x Standard Library: Algorithms (Revision 1)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2084.pdf
966932:2006/10/13(金) 00:20:18
> 要求仕様ベース型のカテゴライズに慣れてください。
< 要求仕様ベースの型のカテゴライズに慣れてください。
967デフォルトの名無しさん:2006/10/13(金) 00:23:05
散らかっててよくわからんが

>>946
コンテナと型に2分するのがそもそも無理では。(だいたいコンテナだって型だし)
排他関係ではあるまい。

コンテナの要件: "23.1 Container requirements" を満たすものがコンテナであって、
「標準コンテナだけがコンテナ」と考えるのは、
STLとその仲間たちの一番美味しいところを食べ損ねてる気がする。
俺コンテナを標準アルゴリズムに食わせたりするのが完全に合法なのが
いいところじゃん。これを安心して行えるという約束ごとが「コンテナの要件」でそ。

basic_stringはまず文字列ではあるけれど、(文字に対しては)シーケンスコンテナの
要件を満たす。…でいいんじゃ? 文字以外に対してはどうかなーって感じだが。

ついでに、resizeは "23.1.1 Sequences" の要件には入っていない様子。
vector や list や deque や string に付いているのは揃いも揃って
ただのオマケらしい。

規格書もいいが、全体像の類いは「C++の設計と進化」あたりがお勧め。
968デフォルトの名無しさん:2006/10/13(金) 01:14:53
質問です。
BCC5.82(Dinkumware STL)を使って、std::hash_mapを使おうとしている
のですが、STLportと違って、Keyにstd::stringを使うインターフェースが
ありません(std::hash<std::string>がない)。

それで、ユーザー定義のハッシュ関数を書いたら、今度は
エラー E2451 C:\Program Files\Borland\BDS\4.0\Include\dinkumware\xhash 187: 未定義のシンボル bucket_size(関数 main() )
エラー E2451 C:\Program Files\Borland\BDS\4.0\Include\dinkumware\xhash 188: 未定義のシンボル min_buckets(関数 main() )
エラー E2029 C:\Program Files\Borland\BDS\4.0\Include\dinkumware\hash_map 77: 'std::_Hash<std::_Hmap_traits
 <std::string,std::string,StringHash,std::allocator<std::pair<const std::string,std::string> >,0> >' はクラスあるいは構造体として宣言済みでなければならない(関数 main() )

などのエラーが出て、コンパイル出来ません。Dinkumwareではhash_mapを
使う事ができないのでしょうか?
969デフォルトの名無しさん:2006/10/13(金) 01:29:46
ないというかテンプレートです…
970デフォルトの名無しさん:2006/10/13(金) 01:32:59
テンプレート?常識という事でしょうか?
971デフォルトの名無しさん:2006/10/13(金) 01:36:59
>>970
templateは型枠なので合う中身を自分で後から書けるというのが売りなわけで
972デフォルトの名無しさん:2006/10/13(金) 01:39:31
後から書き足したら>>968のようなエラーが出たわけなんですが・・・・
973デフォルトの名無しさん:2006/10/13(金) 02:33:03
Dinkumwareてhash実装してたっけ?
974デフォルトの名無しさん:2006/10/13(金) 02:59:22
ある。ただしVC++の奴はstdext::で使わないと互換性警告出るが。
975デフォルトの名無しさん:2006/10/13(金) 07:37:40
> ユーザー定義のハッシュ関数を書いたら

って何よ?

std::hashじゃないの?

> 未定義のシンボル bucket_size(関数 main() )

hash_compareがどうなっているか調べろよ。
http://dinkumware.com/manuals/?manual=compleat&page=hash_map.html
976デフォルトの名無しさん:2006/10/13(金) 13:40:12
boost/multi_array
ってresize やpush_backができないんだね。
無理やりするには、サイズがかわるたびに全部コピーしかない?
977デフォルトの名無しさん:2006/10/13(金) 13:44:08
出来たら意味ないだろ
978デフォルトの名無しさん:2006/10/13(金) 14:32:14
>>977
なぜ?

std::vector< boost::ublas::vector<float> > vecList;
vecList.push_back(vec);
はよくやるけど
979デフォルトの名無しさん:2006/10/13(金) 19:39:03
>>978
multi_array は push_back はないが、resize メソッドはある。

multi_array< int, 2 > a( extens[2][3] ); // 2*3 の 2次元配列。
a.resize( extents[3][3] ); // 3*3 の2次元配列に拡張。

multi_array は必ず長方形で拡張する必要がある上に、
reshape なんかで簡単に形を変えることが出来るから、
ネストしたvectorみたいにはいかないよ。

980デフォルトの名無しさん:2006/10/13(金) 22:32:52
次スレはどうする?
毎度立てる立てないと騒ぐが結局誰かが立ててずるずるとここまでやってきたが。

俺は、当初いらないと言い続けてきたが、
粘り負けした。今はもう存続させていいと思っている。
なんだかんだいって過疎にならず、5スレ目も終わろうとしている。

みんなはどう思う?

981デフォルトの名無しさん:2006/10/13(金) 22:39:49
どうでもいい。
あったらあったで粘着してスレをウォッチし続けるし、
なくなったらなくなったらで別に気にしない。
982デフォルトの名無しさん:2006/10/13(金) 22:52:20
立てるべきでない理由は
「STLをC++から分けて考える理由がない」
実際C++相談室でもSTLの話題は扱われている
立てるべき理由は多分ない...よね?

まぁ反対しても惰性で立てる奴がいるし好きにすれば?って感じ
983デフォルトの名無しさん:2006/10/14(土) 00:13:08
いいかげん STL & Template Metaprogrammingは
C++の技法として定着したんじゃないの?
ということでC++相談室合流に賛成。
984デフォルトの名無しさん:2006/10/14(土) 00:41:47
立てたところでC++相談室とSTL相談室の両方とも見るだけだけどね
985デフォルトの名無しさん:2006/10/14(土) 01:31:55
話がどう転んでも立てる奴がいる限り立つだろ。わざわざ議論することもない。
>>980も言ってるが少なくとも過疎にはなってないわけだし。
986デフォルトの名無しさん:2006/10/14(土) 02:26:11
とりあえずこれ使いきろうぜ
http://pc8.2ch.net/test/read.cgi/tech/1104092624/
987デフォルトの名無しさん:2006/10/14(土) 02:26:53
>>986 あーそれでいいや。
988デフォルトの名無しさん:2006/10/14(土) 04:10:20
確かにSTLはC++の言語体系の一部と考えても差し支えないんだが、
扱う範囲がデカいので、分割でいいんじゃないですかね。
単純に見易さの問題として。
989デフォルトの名無しさん:2006/10/14(土) 04:57:58
>>988 分割の境界がはっきりしていれば、それで何も問題ないんだけどね。
990デフォルトの名無しさん:2006/10/14(土) 05:32:18
はっきりしてるっちゃしてるんだけどね。
普通にC++使ってて出てくるSTLの話題はC++スレで、
ちょいと突っ込んだ話題になったら、ないしは最初からSTLの話したけりゃこのスレで、
てなもんで、今までどおりでいいんじゃまいか。
991デフォルトの名無しさん:2006/10/14(土) 05:51:14
この無意味な談義はスレ埋め目的も含まれてると見たw
992デフォルトの名無しさん:2006/10/14(土) 06:00:59
「普通に」「ちょいと突っ込んだ」「てなもんで」
曖昧すぎ。
993デフォルトの名無しさん:2006/10/14(土) 06:02:38
フヒヒ
994デフォルトの名無しさん:2006/10/14(土) 06:10:35
むしろSTL自体いらない
995デフォルトの名無しさん:2006/10/14(土) 13:13:08
個人的には、STL と Boost でまとめて「C++ template 総合」にしてくれるのが一番しっくりする。
996デフォルトの名無しさん:2006/10/14(土) 13:23:02
俺は STL スレと Boost スレは別が嬉しいかな
やっぱり標準になってるものと、そうでないものの差は大きいと思う。
997デフォルトの名無しさん:2006/10/14(土) 14:14:44
同意
998デフォルトの名無しさん:2006/10/14(土) 14:29:39
両方いらない
999デフォルトの名無しさん:2006/10/14(土) 14:40:40
欲しい奴が立てる、これ定説。
1000デフォルトの名無しさん:2006/10/14(土) 14:48:31
通りすがりが1000ゲッツ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。