【发布时间】:2021-01-30 05:36:57
【问题描述】:
我发现自己在循环内部正在修改的容器 X 上进行迭代。但在每次迭代中,都需要未修改的 X:
for (int x : X) { // wrong, container X in iteration should be the "original"
modify_X(); // X modified here
}
一个解决方案是迭代一个副本
containerT X_copy(X);
for (int x : X_copy) {
modify_X();
}
或
for (int x : containerT {X}) {
modify_X();
}
有没有一种惯用的方法?
【问题讨论】:
-
我认为第二个选项是你能得到的惯用语。
-
除非您的容器包含指针,否则这些都不会修改原始内容。
-
在示例中需要更多的肉才能给出结论性的答案
-
除非您明确使用指针,否则
x将是一个副本