[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 04/24 09:38 / Filesize : 72 KB / Number-of Response : 302
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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を使った方が良いような気がする。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<72KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef