I just learned about the extract
function added to std::set
/std::unordered_set
in C++17. I know this is valid:
while (!my_set.empty()) {
auto node_handle = my_set.extract(my_set.begin());
auto elem = std::move(node_handle.value());
}
But is the following safe? (From https://stackoverflow.com/a/42519996/3234803)
for (auto it = my_set.begin(); it != my_set.end(); ) {
auto node_handle = my_set.extract(it++);
auto elem = std::move(node_handle.value());
}
I know extract
invalidates the iterator passed to it, so extract(it++)
saves the next iterator into it
before it
gets invalidated. But is it guaranteeed that extract
doesn't invalidated other iterators?