起因是在写一道题1的时候遇到了一个问题
这样是对的:
mp.erase(it++);
//it++;
这样会报错:
mp.erase(it);
it++;
然后百度了之后看到说用这个更好(说是因为it会自动++
it = mp.erase(it);
然后我就晕了(你
问了下niltok
,(再次谢谢火火!
然后发现之前的知识有些混淆,于是记录下(问了很长 (因为我傻) 但是简化下其实不多:
除了被擦除的元素 其它的都还在原来的地址
迭代器的前后信息是存在指向位置里面的
erase返回值是被擦除的下一个位置的迭代器
所以it = mp.erase(it);
是对的
真的白痴Q :while(i++) 是先判i再加加吧?
:先加再返回原来的i
int inc(int &i){ int t=i; i=i+1; return t; }
// 突然想到++i比i++快的原因(…
所以mp.erase(it++);
是先获得复制的it,将它++,返回原先的it将它删除,于是是对的,
mp.erase(it);
it++;
这种写法有可能指向不存在的元素
https://zh.cppreference.com/w/cpp/container