トップページ > プログラム > 2015年01月11日 > pJY5lLXp

書き込み順位&時間帯一覧

20 位/190 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000012000000000003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C++相談室 part115 [転載禁止]©2ch.net

書き込みレス一覧

C++相談室 part115 [転載禁止]©2ch.net
418 :デフォルトの名無しさん[sage]:2015/01/11(日) 11:44:40.56 ID:pJY5lLXp
mapやlistでループ回して消していくとき、こいつが許されるのがどうも解せぬ
myMap.erase(it++);
後置インクリメントだと最初にitのコピーとるからOKってのは
こいつらのイテレータって実際のところ現在要素へのポインタに加えて次の要素へのポインタも常に所持してるってこと?
C++相談室 part115 [転載禁止]©2ch.net
419 :デフォルトの名無しさん[sage]:2015/01/11(日) 12:53:48.13 ID:pJY5lLXp
いやそんなわけないか。コピーとったところでそのイテレータは無効だよな
myMap.erase(it++);
は結局後置インクリメントもどき(演算子オーバーロード)だからit++の副作用完了点がはっきりしていてOKなだけで
元々の後置インクリメントの仕様に従うなら
itTmp = it++;
myMap.erase(itTmp);
でないと不自然なのか…
なんでC++11がmapのeraseでイテレータを返すようになったのか分かったわ
C++相談室 part115 [転載禁止]©2ch.net
420 :デフォルトの名無しさん[sage]:2015/01/11(日) 12:59:35.81 ID:pJY5lLXp
でもそうか、erase()に渡すのも副作用完了点だから問題ないのか…


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。