由于我不知道开多少点,于是我决定开个 vector。
vector<ll> t[2];
ll newnode() {
t[0].push_back(-1);
t[1].push_back(-1);
return cnt++;
}
void insert(ll x) {
t[b][p] = newnode();
}
标注的一行 看起来 没有什么问题,但是 newnode 调用了 vector::push_back,这可能导致扩容,由此导致之前的 所有 迭代器(包括引用)失效。又由于 t[b][p] 一定在 newnode() 前计算,然后就
3221225477
3221226356
- 输出一个神奇的数字,比如
-8070442412982925322
所以
ll tmp = newnode();
t[b][p] = tmp;
引用也会失效!谨记!