使用迭代器时从 set/unordered_set 中提取

Ziz*_*Tai 5 c++ c++17

我刚刚了解了C++17中extract添加到std::set/的函数std::unordered_set。我知道这是有效的:

while (!my_set.empty()) {
  auto node_handle = my_set.extract(my_set.begin());
  auto elem = std::move(node_handle.value());
}
Run Code Online (Sandbox Code Playgroud)

但以下安全吗?(来自/sf/answers/2976399751/

for (auto it = my_set.begin(); it != my_set.end(); ) {
  auto node_handle = my_set.extract(it++);
  auto elem = std::move(node_handle.value());
}
Run Code Online (Sandbox Code Playgroud)

我知道extract传递给它的迭代器无效,因此在无效之前extract(it++)将下一个迭代器保存到其中。但是否保证不会使其他迭代器失效?ititextract

eer*_*ika 4

但是否能保证 extract 不会使其他迭代器失效?

是的。Extract 保证不会使其他迭代器失效。两个循环都是安全的。