关于 set 的迭代器失效问题
  • 板块学术版
  • 楼主DengStar
  • 当前回复7
  • 已保存回复11
  • 发布时间2024/11/18 15:24
  • 上次更新2024/11/18 18:24:15
查看原帖
关于 set 的迭代器失效问题
470769
DengStar楼主2024/11/18 15:24

如果我令 it 指向 set 中的某个元素,并且任意地删除(eraseset 中的其它元素,那么 it 会一直保持指向原先的那个元素吗?如果会,it 为了保持指向原先的元素,它会动态地更新自己吗?如果它会动态更新,时间复杂度是多少?
例如这段代码:

int main()
{
    set<int> c = {1, 2, 3, 4, 5};
 
    auto it = c.lower_bound(3);
    c.erase(prev(it)), c.erase(next(it));
    cout << *it << endl;
    
    return 0;
}

输出为 3,看上去 it 指向的元素没有变,但我不知道它是不是一直都会这样。set 并不是一种序列式容器,如果经过修改后它指向同一元素迭代器不会改变,听上去令人费解。

2024/11/18 15:24
加载中...