我是 Qt 的新手,正在尝试学习这些习语。
Qt 在进入 foreach 循环时会自动获取容器的副本。如果您在迭代时修改容器,则不会影响循环。
但它没有说明如何在使用foreach
. 我最好的猜测是:
int idx = 0;
foreach (const Foo &foo, fooList) {
if (bad(foo)) {
fooList.removeAt(idx);
}
++idx;
}
必须在循环之外进行范围似乎很难看idx
(并且必须维护一个单独的循环计数器)。
另外,我知道是的,深拷贝发生了。foreach
制作 的副本QList
,这很便宜,但是一旦我删除了一个元素会发生什么 - 仍然很便宜还是正在进行昂贵的修改时复制?
编辑:这似乎也不像惯用的 Qt。
for (int idx = 0; idx < fooList.size(); ) {
const Foo &foo = fooList[idx];
if (bad(foo)) {
fooList.removeAt(idx);
}
else ++idx;
}