如果我令 it 指向 set 中的某个元素,并且任意地删除(erase) set 中的其它元素,那么 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 并不是一种序列式容器,如果经过修改后它指向同一元素迭代器不会改变,听上去令人费解。