- 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()に渡すのも副作用完了点だから問題ないのか…
|