我看到一个程序员写了这个。
我已经删除了当前迭代指针的值,如何通过后置自增运算符获取下一个迭代指针?
auto it=myset.lower_bound(x);
myset.erase(it++);
我已经删除了当前迭代指针的值,如何通过后置自增运算符获取下一个迭代指针?
当你打电话时
myset.erase(it++);
一些事情会发生。首先,在传递给函数之前,it++
被评估。当你评估it++
时,其结果是it
,这就是传递给函数的内容。因此,您的函数获取it
的值,但调用站点中it
的值是在增加后的值。这意味着当erase
擦除迭代器指向的元素时,它正在擦除旧迭代器指向的内容,而您不再拥有该内容。这是从set
中删除元素的一种完全有效和安全的方法。erase
返回下一个有效的迭代器,因此您可以使用:it = myset.erase(it);
并且它会产生相同的效果。
erase()
返回的就是这个迭代器。 - Hatted Roostererase
返回下一个有效的迭代器,因此您可以使用it = myset.erase(it)
,它将具有相同的效果? - NathanOliver
it++
会将您拥有的迭代器递增,并返回旧值。因此,您可以安全地先更新自己的副本,然后再删除前一个元素。 - BoBTFisherase
操作之前,it++
已经被执行了。该函数获取了it
的旧值并将其删除,而调用方仍然持有it++
的结果,即有效的迭代器。 - NathanOliver