国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

std::map 在循環(huán)中刪除元素

2019-11-08 03:14:11
字體:
供稿:網(wǎng)友
for(;iter!=mapStudent.end();){ if((iter->second)>=aa) { //滿足刪除條件,刪除當(dāng)前結(jié)點,并指向下面一個結(jié)點 mapStudent.erase(iter++); } else { //條件不滿足,指向下面一個結(jié)點 iter++; }}

這種刪除方式也是STL源碼一書中推薦的方式,分析 mapStudent.erase(iter++)語句,map中在刪除iter的時候,先將iter做緩存,然后執(zhí)行iter++使之指向下一個結(jié)點,再進入erase函數(shù)體中執(zhí)行刪除操作,刪除時使用的iter就是緩存下來的iter(也就是當(dāng)前iter(做了加操作之后的iter)所指向結(jié)點的上一個結(jié)點)。 根據(jù)以上分析,可以看出mapStudent.erase(iter++)和map Student.erase(iter); iter++;這個執(zhí)行序列是不相同的。前者在erase執(zhí)行前進行了加操作,在iter被刪除(失效)前進行了加操作,是安全的;后者是在erase執(zhí)行后才進行加操作,而此時iter已經(jīng)被刪除(當(dāng)前的迭代器已經(jīng)失效了),對一個已經(jīng)失效的迭代器進行加操作,行為是不可預(yù)期的,這種寫法勢必會導(dǎo)致 map操作的失敗并引起進程的異常。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 通榆县| 镇赉县| 南昌县| 青川县| 多伦县| 上虞市| 繁峙县| 开阳县| 河北区| 庄河市| 翁牛特旗| 南岸区| 铜梁县| 舞阳县| 柘城县| 法库县| 白水县| 西和县| 襄垣县| 万源市| 通道| 濮阳市| 平阳县| 九龙县| 镇安县| 璧山县| 松滋市| 红安县| 治县。| 建水县| 北宁市| 成安县| 阿勒泰市| 山阳县| 安图县| 台山市| 弥勒县| 会东县| 日喀则市| 兴隆县| 托克托县|