井逝后人(虽然逝STL相关锝 | 违规自删)
查看原帖
井逝后人(虽然逝STL相关锝 | 违规自删)
1476288
lyb_qhd楼主2025/7/23 15:09

由于我不知道开多少点,于是我决定开个 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;

引用也会失效!谨记!

2025/7/23 15:09
加载中...