1 名前:デフォルトの名無しさん [2009/01/11(日) 11:13:44 ] C++標準ライブラリの一つ、STLについて。 前スレ 【C++】STL(Standard Template Library)相談室 10 pc11.2ch.net/test/read.cgi/tech/1219719677/ 過去ログ・リンク・書籍紹介は >>2 以降
175 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:08:36 ] >>136 ,143 www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#92 今のドラフトでは以下の記述が追加されている。 > algorithms that take function objects as arguments are permitted to copy those function objects freely アルゴリズム内でどうコピーされるかは基本的に実装任せってことになるらしい。 for_each() の戻り値はまったく使えないことになりそうだ。
176 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 16:56:46 ] >>175 for_eachの戻りはコピーされた関数オブジェクトに内部状態が反映されてるんじゃなかった?
177 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:17:17 ] >176 関数オブジェクトに全要素を通して処理した結果の状態が保持されていることを期待するだろうが、 極端に言えば各要素の呼び出し毎に新しくコピーした関数オブジェクトを渡されたりすると、期待する 結果と異なる。 参照使うなりコピーされても大丈夫なようにはできるからまったく使えないは言い過ぎ。 とはいえ、そういう用途なら accumulate 使えばいいじゃん、とは思う。
178 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:22:46 ] boost::ref使って渡せばいいんじゃないか。boost::mpl::for_eachではうまくいった
179 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:23:42 ]
180 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:02:38 ] char *buf = new char[n]; //(snip) std::istream is(pointer_streambuf(buf, buf_size)); みたいな感じで、ポインタをバインドできるstreambufってある? ないならつくるんだけど。
181 名前:180 [2009/03/28(土) 19:11:47 ] っていうか勢いあまって作ってしまったんだけど、標準かboostにあるならそっち使う。 あと、>>180 の訂正: x char *buf = new char[n]; o char *buf = new char[buf_size];
182 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:27:36 ] istrstreamか? 廃止予定だけどw
183 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:12:25 ] >>182 おk。でも廃止か。 strstreambufも廃止なんかな。 先にstringstream使ってて、basic_stringにしか対応してないから、 strstreamは無視してたわ。
184 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:15:50 ] vectorについて、ある時点でのvectorの中身を参照するような配列のポインタ、 ちょうどstringのc_strのようなものはありますでしょうか。 allocatorのpointerやaddressがそうなのかと思ったのですが、 vector<int> v; v.push_back(1); v.push_back(2); const int* p = v.get_allocator().const_pointer(); for(int i=0; i<v.size(); i++) cout << p[i]; のように書いても大丈夫でしょうか。
185 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:24:59 ] いやいや、むしろ&v[0]とか&v.front()でいける。 アロケータのconst_pointerはT const*のtypedefだし、addressは&演算子と同じこと。 事実上、死に設定。
186 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:36:31 ] どうしてイテレータじゃだめなのかすら?
187 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:48:40 ] >>185 ありがとうございました。 >>186 C定義の関数に渡す必要があるためです。
188 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:49:58 ] v.at(i)でええやん
189 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:53:17 ] やりたかった例としてはこっちの方が良かったかもしれません。 int buf[256]; if(v.size()<256) memcpy(buf, &v[0], v.size());
190 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 14:51:17 ] C++0xならv.data()が使えるんだけどな
191 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 06:40:05 ] SGIがなんかあれなんですよね
192 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 10:09:49 ] 2度目のchap11
193 名前:インドリ [2009/04/09(木) 10:03:38 ] blogs.wankuma.com/episteme/archive/2009/04/08/171040.aspx d.hatena.ne.jp/faith_and_brave/20090408
194 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:21:23 ] 淫鳥
195 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:35:56 ] 久しぶりにSTLPort使おう思ったら、ビルドまでずいぶん便利になってるのな……
196 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:09:07 ] STLport 5.2.1とboost 1.38.0を一緒に使おうと思ったらビルドエラーが出まくって無理だった
197 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 18:33:47 ] ちょw
198 名前:デフォルトの名無しさん [2009/04/22(水) 21:47:20 ] 自分で作ったクラスにイテレータを実装する方法がいまいちわかりません。 どこかにいい解説はないでしょうか? それとも皆 boost::iterator_facade を使ってるのかな?
199 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 23:50:36 ] >>198 boost::iterator_facade で何か不満でも?
200 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 23:58:19 ] boostはインストール禁止なんです…
201 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:07:33 ] なんでSTLport5.2.1をMinGWでビルドしようとすると "awk"が見つかりません のエラーが出るの? STLport5.1.5までは何の問題もなくビルド出来ていたんだが
202 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:13:15 ] >>200 じゃ、 boost::iterator_facade の実装を見るとか。 とりあえず作ってみたものと、その問題点をここで晒してみるといいかもしれない。
203 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 01:37:55 ] >>198 std::iteratorのマニュアルを読んで、 std::istream_iteratorみたいな単純なやつを読む。
204 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 06:13:13 ] インストールというか置くだけで使えるよ! そういうことではないんだろうが
205 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 16:56:09 ] lower_bound/upper_boundですが ttp://www.wakhok.ac.jp/~sumi/stl/manual/bsearch.html#lower_bound() > valueと一致する値を持つ最後の次の要素。見つからない場合はlast。 ttp://www005.upp.so-net.ne.jp/episteme/html/stlprog/algorithm.html#lower_bound > ソートされたシーケンス[first,last)に対し、valueより大きいか等しい最初の要素の位置を返します。 書いてあることが違うのはどういう事なんでしょう? 手元の環境(VC2008EE)では後者のようですが・・・。
206 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 17:18:07 ] >>205 その前者は、 >ある値と一致する範囲の一番最初を返す と書いてある見出しとも矛盾している。
207 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:04:49 ] 後者が正しい。 もともと lower_bound と upper_bound は value を挿入可能な半開区間 [ lower_bound, upper_bound ) を探すためのアルゴリズムだから。 これは equaLrange の結果に等しい。 って、マッサー本に書いてあった。確か。
208 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:22:49 ] 前者はlowerとupperの解説文章が逆ってことかな
209 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:27:28 ] >>206 本当ですね。 >>207 なるほど。 >>208 逆としてみても、「見つからない場合はlast。」というのはおかしいですね。 あと、引数や戻り値のイテレータがランダムアクセスイテレータなのが気になります。 どうもありがとうございました。
210 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 05:52:59 ] class A { private: int m_nTime; public: A( int nTime ) : m_nTime( nTime ) {} int GetTime() { return m_nTime; } } typedef map< int, A * > AMap; typedef AMap::value_type AMapValue; typedef list< AMap * > AMapList; 例えば上記の様な定義をしていて、 メイン関数内で、AMapList内をイテレータを利用して、特定のAMapの「Key」部を検索し、 見つかったら、AMapの「Value」部を出力(クラスAのGetTime()を呼び出す)するような処理 をさせたいのですが、どうすれば実現できるでしょうか? また、listコンテナの中にmapコンテナを突っ込むような利用は、一般的にあまりされないの でしょうか?
211 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 09:08:28 ] >>210 それ、mapじゃなくてpairじゃいかんの?
212 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 10:43:41 ] >>210 とりあえず自分で書いたやつを見せてみろよ。何がわからんのかわからん。
213 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:15:05 ] >>210 1. AMapListから特定のAMapのイテレータを取得する。これをiとする 2. (*i->find(キー))->GetTime() mapをlistに入れた構造が必要な場合はmapをlistに入れるよ …としか答えられないな
214 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:28:56 ] (*i)->find(キー)->second->GetTime();じゃね?
215 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 15:45:05 ] >>214 そうだわ スマネ
216 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:13:42 ] vectorの要素ってCopy ConstructiveとAssignable以外には必要ないはずだよな? VC9のSTLはDefault Constructiveを要求してきやがるんだが……。 #include <vector> class hoge { hoge(int) {} hoge(const hoge&) {} hoge& operator=(const hoge&) { return *this; } }; int main() { std::vector<hoge> vec; vec.resize(10); }
217 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:30:07 ] >>216 それ、 resize() のあとの要素が何で初期化されてることを期待してるの?
218 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:46:00 ] ああ、ごめん書き間違えた resizeの第二引数にhogeの適当なインスタンス渡してもだめなんだよ。
219 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:48:13 ] g++つかえば
220 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:14:50 ] >>216 bcc 6.1.0でも次のようなエラーが出るよ エラー E2285 vector 608: 'hoge::hoge()' に一致するものが見つからない(関数 vector<hoge,allocator<hoge> >::resize(unsigned int) ) エラー E2247 vector 1179: 'hoge::hoge(const hoge &)' はアクセスできない(関数 vector<hoge,allocator<hoge> >::_Insert_n(_Vector_iterator<hoge,allocator<hoge> >,unsigned int,const hoge &) ) エラー E2247 vector 1203: 'hoge::hoge(const hoge &)' はアクセスできない(関数 vector<hoge,allocator<hoge> >::_Insert_n(_Vector_iterator<hoge,allocator<hoge> >,unsigned int,const hoge &) ) エラー E2247 xutility 1681: 'operator hoge::=(const hoge &)' はアクセスできない(関数 std::void fill<hoge *,hoge>(hoge *,hoge *,const hoge &) ) エラー E2247 xutility 1551: 'operator hoge::=(const hoge &)' はアクセスできない(関数 std::hoge * _Copy_backward_opt<hoge *,hoge *>(hoge *,hoge *,hoge *,_Nonscalar_ptr_iterator_tag) ) エラー E2247 xutility 1515: 'operator hoge::=(const hoge &)' はアクセスできない(関数 std::hoge * _Copy_opt<hoge *,hoge *>(hoge *,hoge *,hoge *,_Nonscalar_ptr_iterator_tag) ) エラー E2247 28: 'hoge::hoge(const hoge &)' はアクセスできない(関数 std::void _Construct<hoge,hoge>(hoge *,const hoge &) ) *** コンパイル中に 7 個のエラーが発生しました ***
221 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:18:44 ] あら間違えて書き込んでしまった ちなみにMinGW5.1.2(gcc3.4.5) + STLport5.1.7で同じソースをコンパイル すると vector1.cpp:11: error: no matching function for call to `hoge::hoge()' vector1.cpp:5: note: candidates are: hoge::hoge(const hoge&) vector1.cpp:4: note: hoge::hoge(int) _algobase.h: In function `_OutputIter stlp_priv::__copy(_RandomAccessIter, _RandomAccessIter, _OutputIter, const stlp_std::random_access_iterator_tag&, _Distance*) [with _RandomAccessIter = hoge*, _OutputIter = hoge*, _Distance = ptrdiff_t]': _algobase.h:250: instantiated from `_OutputIter stlp_priv::__copy_ptrs(_InputIter, _InputIter, _OutputIter, const stlp_std::__false_type&) [with _InputIter = hoge*, _OutputIter = hoge*]' (...以降あまりにエラーが多いので省略) で、やはりDefault Constructiveを要求してくるので、 Dinkumwareだけの問題ではない事がわかる。
222 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:24:02 ] ちなみに public: hoge() {} を入れると両者とも一発で通る。
223 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:28:54 ] resizeのプロトタイプは void resize(size_type sz, T c = T()); だからデフォルトコンストラクタがないと通らないこと自体は当然
224 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:50:24 ] ただ実装はSTLPortもDinkumwareも void resize(size_type, T) void resize(size_type) のように二つの関数に分けてるがな
225 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:55:27 ] #include <vector> struct hoge { hoge(int) {} hoge(const hoge&) {} hoge& operator=(const hoge&) { return *this; } }; int main() { std::vector<hoge> vec; vec.resize(10, hoge(5)); return 0; } これで gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) gcc version 4.3.2 20080827 (beta) 2 (GCC) ※ on cygwin VC7.1 cl (Version 13.10.6030 for 80x86) VC8 cl (Version 14.00.50727.762 for 80x86) VC9 cl (Version 15.00.21022.08 for 80x86) bcc 6.10 Comeau 4.3.9b + VC7.1 Comeau 4.3.9b + VC8 Comeau 4.3.9b + VC9 Comeau 4.3.9b + bcc 6.10 全部通るよ?
226 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:57:11 ] >>223 >>218
227 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:57:50 ] >>225 むしろそれだけの環境を使いこなすお前は何者
228 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:04:53 ] 俺の場合、<memory>218行目の typename _Alloc::value_type _Val; でもろにDefault Constructor要求された。
229 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:09:42 ] >>216 privateじゃん
230 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:13:13 ] こりゃひどい
231 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:22:48 ] ワラタ
232 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 23:17:14 ] ついでに言うとdefault constructibleだ。
233 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 01:05:59 ] いいもの見させてもらった 記念パピコ(゚∀゚)
234 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 20:36:31 ] あなたをprivateです。
235 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 21:58:18 ] わたしはあなたのpublic
236 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 00:03:10 ] ごめんなさい、ずっとfriendでお願いします
237 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 00:51:04 ] delegateな俺の心はこっぱみじん
238 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 07:30:41 ] >>237 スレ違い
239 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 10:48:21 ] NULLぽ
240 名前:デフォルトの名無しさん [2009/05/04(月) 16:40:11 ] - -―- 、 /...::::::::::::::.. ヽ / ..:::::::::::::::::::/\ ヽ /..:::/::::/::::// ヽ l:. l. l:::::!::::/●) (●)|:: | . !:::l::::l/// ,, ///l:i:l いやぁぁぁん ヽ:i::!、 r ― ァ ノノ' ` l\`ー './ ノヽ \_フ.ヽ |_ 丶 ヽ . | |' 初心者)
241 名前:デフォルトの名無しさん [2009/06/07(日) 14:44:09 ] atnd.org/events/702 124.45.27.25:12086/stream.mp3.m3u IRCNET #CRYBUTSU
242 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 15:06:24 ] >>241 なぜここに? 0xスレに貼るのならともかく。
243 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 17:35:41 ] ぶつぶつ会終わったよー
244 名前:デフォルトの名無しさん [2009/06/18(木) 11:57:11 ] 質問です vector<int> v; v.resize(100); とやった際に、確保されたv[0]〜v[99]は、0クリアされていることは保障されているのでしょうか? 自分で試しにやってみる限り0クリアされているのですが、なぜわざわざクリアされているのか疑問です。 (mallocとかで確保したメモリは、クリアされていないですよね。なのになぜvectorだとわざわざそんなことを?) 自分で試した環境は、VS2008C++Express です
245 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 12:03:35 ] >>244 新たに確保された要素はデフォルトコンストラクタで初期化される
246 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 12:04:28 ] void resize( size_type sz, T c = T() ); だから。 なんで値で埋めるのかは…仕様決めた人に聞いてくれ。 領域確保だけならreserveがあるし。
247 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 13:00:56 ] 保障されてたんですね。 どうもありがとうございます
248 名前:2chとはいえマ的に mailto:sage [2009/06/18(木) 14:00:31 ] ×保障 (ある事態への)備え。プログラム的にいうとtry〜catch ○保証 約束されていること。プログラム的にいうとassert()を抜けるのが間違いない状態
249 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:37:51 ] 自作のクラスからヌルポの例外投げたいんだが std::exceptionに標準であったりしない? ヌルポ
250 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:47:35 ] >>249 標準にはない。どういう場面で投げたい? 場合によっては標準の例外の方が意味が明確になるかもしれない。
251 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:54:58 ] >>250 えっとね データコンテナっぽいクラスを作ってて ->演算子とかで中のデータにアクセスさせてるんだけど 中のデータがnullの時は->演算子の処理中に例外で中断させたい
252 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 23:01:06 ] >>251 なるほど。標準にマッチするのはなさそうかな。
253 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 23:04:08 ] >>252 そっかthx
254 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 23:38:18 ] boostになら何かそんなのあったな
255 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 23:44:06 ] std::runtime_error でいいんじゃネ
256 名前:デフォルトの名無しさん [2009/06/29(月) 22:31:41 ] vector で、バッファ拡張で要素をコピーするとき、メモリイメージをコピーではなく、 コピーコンストラクタでコピーして、コピー元は delete するのって何故だっけ?
257 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:34:09 ] 俺のLv7のESPで読んだところ swap技法か例外安全について聞きたいらしい
258 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:43:34 ] なんかいろんな話がごっちゃになってるような気がする
259 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:56:09 ] >>256 メモリイメージをコピーで問題が発生しない保証は無いじゃないか
260 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 02:02:47 ] >>256 仮にオブジェクトが自分のアドレスを使って何かしてるとしたら
261 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 07:47:16 ] >>256 intなんかはメモリ領域のコピーでいいけど、 smart_ptrなどではオブジェクトのコピー処理を実行する必要があるから
262 名前:261 mailto:sage [2009/06/30(火) 07:50:46 ] 別にそうでもないか 忘れてくれ
263 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 18:34:47 ] 時々でいいので>>261 の事を思いだしてあげて下さい
264 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:16:30 ] >>262 >>256 smart_ptrはコピー時に参照回数を変更するひつようがあるんでメモリイメージコピーはできないからそうでもあるよ。
265 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:20:47 ] メモリ領域コピーして元領域のメモリをそのまま解放したらカウント維持で問題ないからそうでもない そういう問題ではない
266 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 17:15:45 ] ものすごく基本的な質問をさせてください。 std::vectorで100個(数は可変)のデータがあって これの最初20個ぐらい(数は可変)のデータを削除して 前に詰めたいのですが、どうすればいいのでしょうか? erase (remove( ではダメでした。
267 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 17:29:47 ] v.erase( v.begin(), v.begin() + 20 );
268 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 19:53:15 ] できました! ありがとうございました!
269 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:27:56 ] 初めて出てきた要素に対してのみ動作するunique_transformを実装してるのですが unary_functionを継承した関数オブジェクトだけでなく 普通の関数も渡せるようにするにはどうすれば良いのでしょうか? template<class InputIterator, class OutputIterator, class UnaryFunction> InputIterator unique_transform(InputIterator first, InputIterator last, OutputIterator result, UnaryFunction unary_func){ set<iterator_traits<InputIterator>::value_type> s; while(first!=last){ if(count(s.begin(),s.end(),*first)>=1){++first;} else{ s.insert(*first); *result=unary_func(*first); ++first;++result; } } return last; } struct i:public unary_function<int,int>{ int operator()(int a)const{return a;} }; //main側 string a="abcadbc"; string b; unique_transform(a.begin(),a.end(),back_inserter(b),i()); cout << b << endl; これを int id(int n){return n;}を定義して unique_transform(a.begin(),a.end(),back_inserter(b),id) などと出来るようにしたい 後、STL実装ってVisualStudioのどっかのフォルダに入ってるんですかね?
270 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:51:41 ] あ、特に修正しなくてもidも渡せるのか >>269 は忘れてください
271 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:53:25 ] 忘れました。^^
272 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:14:30 ] std::vector<Object*> objs; をソートしたいのですが、どうすればいいのでしょうか? Objectクラスにはbool operator< (const Object& lhs, const Object& rhs); が定義されています。 objs.sort (objs.begin(), objs.end()); とやると、上の<を使わずにポインターの値そのものを使ってソートしてくれやがります。
273 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 16:48:57 ] >>272 第三引数にコンパレータを渡せ
274 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 17:42:22 ] Object& じゃ型が違うんじゃ Object*& じゃないの
275 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 17:50:35 ] >>274 ポインタ型同士の比較は272が言っているとおりコンパイラが組込で持っているから、 そんなのは定義できない。 というわけで>>273 。
276 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:00:58 ] > コンパイラが組込で持っている ああ、すっかり忘れてた
277 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:23:21 ] bool operator <(Object* o1, Object* o2); グローバル関数のオーバーロードで行けるかと思ったけど、 引数の片一方がクラスじゃねえぞ、とコンパイラにキレられた
278 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 18:54:19 ] ObjectPtrクラスを作って、Objectの&を上書きしてPtrクラスを返すようにすれば
279 名前:272 mailto:sage [2009/07/29(水) 19:03:15 ] みなさん、ありがとうございます。 言っていることがさっぱりわからないので、勉強し直してきます。
280 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 19:40:45 ] うだうだ言っていないで、こう書けばいい。 #include <boost/lambda/lambda.hpp> using boost::lambda::_1; using boost::lambda::_2; std::sort(objs.begin(), objs.end(), *_1 < *_2);
281 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:00:25 ] lambda さんかっけーっす!
282 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 11:48:54 ] なるほど、覚えておこう std::sort(objs.begin(), objs.end(), *boost::lambda::_1 < *boost::lambda::_2);
283 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:19:29 ] 日本横断 STL の旅 SL の見間違いだった
284 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 22:07:16 ] そういえばlsってよくslと打ち間違えて電車走るな 電車は飽きたので、slって打ったらSTLを宣伝するディストリを誰か作って
285 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 22:39:14 ] >>284 走っているのは蒸気機関車であって電車ではない罠。 つーか、適当なSTL紹介文書を垂れ流すスクリプトを作って問題のslよりも上流に置けばいいだけじゃん。
286 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 22:47:12 ] alias sl='lynx www.sgi.com/tech/stl/ '
287 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:59:28 ] ttp://d.hatena.ne.jp/wasisan/20090703/ STLってlistとtreeを区別するもんだっけ?
288 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 10:25:05 ] >>287 別に区別するともしないとも言ってないんでないの?
289 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 18:32:11 ] STLの中にはlistと別に_Treeクラスがある listのノードは_Next, _Prevがあるだけだが _Treeのノードは_Parent, _Left, _Rightがあるから 手が一本多い=構造に違いがある っていうレスを求めてるのか?>>287
290 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 19:44:14 ] 標準で定められてるSTLコンテナはvector,deque,list,set,multiset,map,multimapだけ treeはないし、あったとすればそれはベンダの独自拡張だから何とも言えない
291 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 02:49:21 ] VCだと確かmapとsetの親がtreeだったな
292 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 00:36:35 ] 今時二分木とかw ハッシュマップだろjk
293 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 01:20:43 ] おまえのハッシュはソート済みにしてくれんのか
294 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 02:15:38 ] おうよ、常にソート済みさ
295 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 02:25:42 ] 鬼才あらわる
296 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:04:35 ] >>294 男前だなあんた
297 名前:デフォルトの名無しさん [2009/08/21(金) 12:08:50 ] std::stringstreamは、ostringstreamとistringstreamの多重継承であると知った std::stringはstd::stringstreamと関係してる?別物?
298 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:18:47 ] >>297 当然関係してる。 で、当然別物。
299 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:34:25 ] >>297 嘘乙 stringstreamはiostreamを継承している
300 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 21:02:08 ] int a[10]; std::generate(a, a+10, rand); で乱数を入れられますが、rand()%100を入れたい場合、bindとか使ってどう書けばいいですか? lambdaならできそうな気はしますが。
301 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 22:33:27 ] >>300 generate(a, a+10, bind(modulus<int>(), bind(rand), 100)); TR1(bind)無しだと関数オブジェクト作らないと無理かな。 bindが使える環境ならTR1のrandomを使った方が良いような気がする。