将下列代码
it split(int x){
it k = tr.lower_bound(node(x));
if(k!=tr.end()&&k->l==x)return k;
k--;
if(k->r < x)return tr.end();
tr.insert(node(k->l,x-1,k->v));
it ret = tr.insert(node(x,k->r,k->v)).first;
tr.erase(k);
return ret;
}
改为
it split(int x){
it k = tr.lower_bound(node(x));
if(k!=tr.end()&&k->l==x)return k;
k--;
if(k->r < x)return tr.end();
ll r = k->r,l=k->l,v=k->v;
tr.erase(k);
tr.insert(node(l,x-1,v));
it ret = tr.insert(node(x,r,v)).first;
return ret;
}
就过了。
请问是否在 erase() 操作后会导致原有的迭代器失效?