c++ - 将元素移出 unordered_set
问题描述
我有一个unordered_set<string>
,我想消耗(即从)这个集合中的每个元素并用它做一些事情。从语法上讲,我看到了几种方法:
unordered_set<string> s = ...;
// 1
for (auto& x : s) {
auto x2 = std::move(x);
do_something(x2);
}
// 2
auto first = std::make_move_iterator(s.begin());
auto last = std::make_move_iterator(s.end());
while (first != last) {
auto x2 = *first++;
do_something(x2);
}
// 3
while (!s.empty()) {
auto it = s.begin();
auto x2 = std::move(*it);
s.erase(it);
do_something(x2);
}
但是,所有这些都让我担心我在迭代容器时正在修改容器。我怀疑至少 2 是安全的,因为这是有效的:
unordered_set<string> s;
vector<string> v;
v.insert(std::make_move_iterator(s.begin()),
std::make_move_iterator(s.end()));
我不确定 1-3 中的任何一个是否被定义为安全/有效。如果是这样,我在哪里可以找到支持证据?如果没有,有什么安全的方法可以做我想做的事?
解决方案
推荐阅读
- javascript - 如何找到以数字为底的对数?
- jquery - 节省
- regex - 正则表达式查找#aabbcc 格式的十六进制颜色以将它们缩短为#abc
- ios - 使用解密时,表达式类型不明确,没有更多 AES 上下文
- ios - Navigation controller how to pop entire stack, including root
- c# - 使用 VS 安装程序后,Windows WCF 服务无法启动 - 错误 1053
- python - 使用 Pandas Python 绘制条形图时忽略 Figsize 参数
- mongodb - MongoDB在内部子集合上聚合组并获取计数
- excel - excel中的python for循环迭代
- mysql - 本机查询 where 参数 LIKE - 无结果