我刚刚了解了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++)
将下一个迭代器保存到其中。但是否保证不会使其他迭代器失效?it
it
extract