【C++】STL(Standard Template Library)相談室 6
ごめん、resizeだった。
>>938 !!! チェックしてなかったわちょーさんくす「
>>933 vector<boost> の特殊化を消すって?
特定のクラスを引数に取ったときだけ
クラステンプレートの特殊化を禁止するなんてことできるの?
なんか俺根本的にテンプレートを理解してない?
そもそもvector<boost>の時点で
>>940は何かがおかしい。
>そもそもvector<boost>の時点で
>>940は何かがおかしい。
そりゃぁ、>940の頭だろ。
今更仕様から取り除くことはできないな。
利用してるプログラムが軒並みアウトになっちまう。
bool と全く同じように扱えるクラス __bool を標準で提供して、
vector<__bool> とできるようにするとかなら可能。
sstreamみたいに段階を経て亡き物とする方法も。
名前が変わったんだっけ?
vector<bool> の代わりとなるクラスを作って、
今まで vector<bool> としてあったところをそれで置換してもらう、
っつー形に強引にすることはできんのかね。
list と vector を 使って sort 以外同じ書き方でできるの内容のプログラムなので
切り替えて使っているのですが、sort を使いたくて困りました。
sort も使いたいのでコンパパイル時に切り替えたいのですが;
自前の #define を使ってではなく、その変数が、list か vector かによって
条件コンパイルする方法はないでしょうか?
実行時では、sort 部分がコンパイルエラーになるので間に合いません。
なんだかよく分からんがオーバーロードを駆使して解決できそう
イテレータのトレイトに対してオーバーロードされたテンプレート関数を作る。
std::advance関数の実装が参考になるよ。
コンテナのイテレータがランダムアクセスイテレータならstd::sortが使えて、
両進イテレータならメンバ関数のsortが用意されていることを期待するわけだ。
C++はこういう見えにくいインターフェースを多用するから困る。
そのためにコンテナのイテレータのタイプに合わせて
コンパイル時にどちらを使うか決定してくれる奴があったと思うけど・・・
そんな便利な記法STLにあったっけ
がりがりオーバーロード書いてたよ。
今からリファレンス読み返してくるorz
boost::sortはenable_ifを使って
渡されたコンテナにメンバとしてsort()が定義されている場合はそれを使い
定義されていない場合はsortアルゴリズムを使うように定義されてるみたい
というわけでこれを使うのが楽っぽい?
>>951 そこでコンセプトですよ。
今までただの文書にするしかなかったけど、
今度、言語仕様に組み込まれそうだし。
traitとconceptの違いが分からない
modern C++ design読めってことですかそうですか
イテレータは、ポインタまたは、 std::iterator を継承していることが必須条件
だから、どちらの場合でも、iterator_category でイテレータの特性を知ることが出来るよ。
>>956 trait は型について問い合わせるために使える個々の情報。
concept は型が満たすべき条件と意味づけをひとまとめにしたもの。
>>957 イテレータは別にstd::iteratorを継承する必要はなく、十分条件に過ぎない。
それを継承すれば、その型に対して簡単にiterator_traitsが使用可能になるというだけ。
でも、iterator_traits が使えないと、advance と distance を個別に実装しないと動かない罠
std::iteratorを継承せずとも、自分でイテレータのクラスに
value_typeやiterator_categoryなどを定義すれば、
iterator_traitsは使える。
iterator_traitsを特殊化するというもっと荒業めいた方法もある。
テンプレート特殊化って
既存のクラスに後からトレイトやらコンセプトやら
情報を書けるから便利だよな。
これぞ再利用。
strsteamの間違いだろ。
ボケなのか素なのか分からないよ
VC8のiostreamなんですけどね
読み書きするたびにmutex確保するんですよ
無駄なんですよ
なんとかなりませんかね
ならん。
もうシングルスレッドの時代は終わった。
直接いじくるんならstdを使う価値があまりなかったり・・・
できればpolicyやらで制御できてほしかったンですけどネ・・・
STLport(5.1.1)の設定システムがよくわからないんだけど、
host.hがSTLのビルド時に使う途中変更不可の設定で、
user_config.hがSTLを使うプロジェクトによって変更してもいい設定、
という理解で良い?
>>970 レスありがとうございます。
チェックいたしましたが、iostreamでは参照されていないようです・・・
STLPortはシングルスレッド版のiostream用意してなかったっけ
最近のバージョンはそのあたりのビルドがめんどくさくなったが
974 :
デフォルトの名無しさん:2007/07/23(月) 20:29:06
C++でデータマネジメント用のライブラリなんてありますか?
マージしたりマージしたり・・・・
何をどうマージするの?
976 :
デフォルトの名無しさん:2007/07/23(月) 21:13:30
C++でETLはありだな。
もうミンナについて行けない。
もだんなんとかって本読むよ
もだんなんとかは勉強になるけどちょっとふるいな
>>978 theoretically interesting for some people, but practically useless!
boost::mpl本の和訳ってまだ出てないんだよなぁ…
981 :
名無しさん@そうだ選挙に行こう:2007/07/29(日) 12:14:04
class CTest{
public:
int nNo; //学籍番号
char szName[20]; //生徒名
int nTensu; //テスト点数
}
上記のようなクラスのインスタンスをvectorに格納しておいて
場合によって、ソート条件を変更したいのですが、どのように
すればいいでしょうか?
学籍番号ソート、生徒名ソート、点数ソートなどしたいのですが。
ソートの為の比較演算子だと1パターンしかソート条件を定義できないような
気がして・・。
operator<(const CTest &a)const{
return nTensu < a.nTensu;
}
どなたかご教示の程、お願いしますm(__)m。
>>981 std::sortに好きな比較関数オブジェクト作って渡せば?
>>981 素直にやるなら
>>982 邪道な方法としてはメンバ変数にソート用のフラグを用意して、
それをもとにoperator<() の中で分岐
フラグはソート前にセットする。
というか典型的な関数オブジェクトを活用するパターンだよな
986 :
名無しさん@そうだ選挙に行こう:
関数オブジェクトをキーワードにサンプルを探せました。
どうもありがとうございましたm(__)m