看到了Eraser iterators這篇不發表一下文章實在對不起作者啊
把Erase的痛點都寫出來了
在Range based loop要Erase只有以下兩種方法
1 | for (auto it = array.begin(); it != array.end();) |
或者是
1 | array.erase(std::remove_if(array.begin(), array.end(), |
第一種很直覺,不過跟C++11提倡的Range based loop算是一種退化
而第二種出現了4個array,一不小心還會有打錯字的風險
天才作者提出了第三種方式
1 | for (auto& item : iter::eraser(array)) |
非常漂亮的解法!