【C++】STL(Standard Template Library)相談室 5
basic_stringはSTLではない。
STLはコンテナ、アルゴリズム、イテレータから成っている。
したがって、basic_stringはコンテナではない。
basic_string→コンテナ
string→not コンテナ
>>952 その論理だとboost::reverce_iteratorはiteratorじゃないんですか?
さっきからくだらないこと言ってる奴は標準コンテナと自作コンテナの区別ぐらいつけろ。
俺定義のSTLなんてどうでもいいよ
STLとかコンテナとか気にせず、
ただ使いこなせればそれでいいとおもうんだが。
知識偏重主義ってうざいよ。
basic_stringをSTLコンテナだと思って使ってると微妙に足りないメンバ関数があっていらついてくる。
今日はどしたんだ?
>>952 別にSTLに含まれていなくても、要件さえ満たしていれば、
コンテナやらイテレータを名乗るのは全く問題ないと俺は思うんだ。
>>961 コンテナやらイテレータを名乗る≠(標準)コンテナや(標準)イテレータである
これを理解して言っているのなら別に構わないんじゃないかな?
ライブラリを自作して公開する時に、これは自作コンテナですとか
イテレータの要件を満たした代物ですなんていうのはめんどくさいしね。
全部自作自演に見える
しかしてここまで俺の自演
965 :
932:2006/10/13(金) 00:19:45
966 :
932:2006/10/13(金) 00:20:18
> 要求仕様ベース型のカテゴライズに慣れてください。
< 要求仕様ベースの型のカテゴライズに慣れてください。
散らかっててよくわからんが
>>946 コンテナと型に2分するのがそもそも無理では。(だいたいコンテナだって型だし)
排他関係ではあるまい。
コンテナの要件: "23.1 Container requirements" を満たすものがコンテナであって、
「標準コンテナだけがコンテナ」と考えるのは、
STLとその仲間たちの一番美味しいところを食べ損ねてる気がする。
俺コンテナを標準アルゴリズムに食わせたりするのが完全に合法なのが
いいところじゃん。これを安心して行えるという約束ごとが「コンテナの要件」でそ。
basic_stringはまず文字列ではあるけれど、(文字に対しては)シーケンスコンテナの
要件を満たす。…でいいんじゃ? 文字以外に対してはどうかなーって感じだが。
ついでに、resizeは "23.1.1 Sequences" の要件には入っていない様子。
vector や list や deque や string に付いているのは揃いも揃って
ただのオマケらしい。
規格書もいいが、全体像の類いは「C++の設計と進化」あたりがお勧め。
質問です。
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を
使う事ができないのでしょうか?
ないというかテンプレートです…
テンプレート?常識という事でしょうか?
>>970 templateは型枠なので合う中身を自分で後から書けるというのが売りなわけで
後から書き足したら
>>968のようなエラーが出たわけなんですが・・・・
Dinkumwareてhash実装してたっけ?
ある。ただしVC++の奴はstdext::で使わないと互換性警告出るが。
boost/multi_array
ってresize やpush_backができないんだね。
無理やりするには、サイズがかわるたびに全部コピーしかない?
出来たら意味ないだろ
>>977 なぜ?
std::vector< boost::ublas::vector<float> > vecList;
vecList.push_back(vec);
はよくやるけど
>>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みたいにはいかないよ。
次スレはどうする?
毎度立てる立てないと騒ぐが結局誰かが立ててずるずるとここまでやってきたが。
俺は、当初いらないと言い続けてきたが、
粘り負けした。今はもう存続させていいと思っている。
なんだかんだいって過疎にならず、5スレ目も終わろうとしている。
みんなはどう思う?
どうでもいい。
あったらあったで粘着してスレをウォッチし続けるし、
なくなったらなくなったらで別に気にしない。
立てるべきでない理由は
「STLをC++から分けて考える理由がない」
実際C++相談室でもSTLの話題は扱われている
立てるべき理由は多分ない...よね?
まぁ反対しても惰性で立てる奴がいるし好きにすれば?って感じ
いいかげん STL & Template Metaprogrammingは
C++の技法として定着したんじゃないの?
ということでC++相談室合流に賛成。
立てたところでC++相談室とSTL相談室の両方とも見るだけだけどね
話がどう転んでも立てる奴がいる限り立つだろ。わざわざ議論することもない。
>>980も言ってるが少なくとも過疎にはなってないわけだし。
確かにSTLはC++の言語体系の一部と考えても差し支えないんだが、
扱う範囲がデカいので、分割でいいんじゃないですかね。
単純に見易さの問題として。
>>988 分割の境界がはっきりしていれば、それで何も問題ないんだけどね。
はっきりしてるっちゃしてるんだけどね。
普通にC++使ってて出てくるSTLの話題はC++スレで、
ちょいと突っ込んだ話題になったら、ないしは最初からSTLの話したけりゃこのスレで、
てなもんで、今までどおりでいいんじゃまいか。
この無意味な談義はスレ埋め目的も含まれてると見たw
「普通に」「ちょいと突っ込んだ」「てなもんで」
曖昧すぎ。
フヒヒ
むしろSTL自体いらない
個人的には、STL と Boost でまとめて「C++ template 総合」にしてくれるのが一番しっくりする。
俺は STL スレと Boost スレは別が嬉しいかな
やっぱり標準になってるものと、そうでないものの差は大きいと思う。
同意
両方いらない
欲しい奴が立てる、これ定説。
1000 :
デフォルトの名無しさん:2006/10/14(土) 14:48:31
通りすがりが1000ゲッツ
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。