我见过一个程序员写这个.
auto it=myset.lower_bound(x);
myset.erase(it++);
Run Code Online (Sandbox Code Playgroud)
如果我已经删除了当前的迭代指针值,如何通过后增量运算符获取下一个迭代指针?
Nat*_*ica 11
你打电话的时候
myset.erase(it++);
Run Code Online (Sandbox Code Playgroud)
有几件事情发生了.首先it++在传递给函数之前进行评估.当你评估it++结果时,那是it传递给函数的结果.因此,您的函数获取值,it但it调用站点中的值是递增后的值.这意味着当erase擦除迭代器指向它的元素时,它会删除旧迭代器指向的不再存在的元素.这是从a中擦除元素的完全有效且安全的方法set.
作为替代方案,从C++ 11开始,erase返回下一个有效的迭代器,以便您可以使用
it = myset.erase(it);
Run Code Online (Sandbox Code Playgroud)
它会产生同样的效果.