- 1 名前:デフォルトの名無しさん [2009/01/11(日) 11:13:44 ]
- C++標準ライブラリの一つ、STLについて。
前スレ 【C++】STL(Standard Template Library)相談室 10 pc11.2ch.net/test/read.cgi/tech/1219719677/ 過去ログ・リンク・書籍紹介は >>2 以降
- 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を使った方が良いような気がする。
|

|