微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用迭代器从set / unordered_set中提取

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

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

但是以下安全吗? (摘自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());
}

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

解决方法

但是可以保证提取不会使其他迭代器无效吗?

是的。提取保证不会使其他迭代器无效。这两个循环都是安全的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。