我是Qt新手,想学习这些成语。 foreach文档说: Qt在进入foreach循环时会自动获取容器的副本。 如果您在迭代时修改容器,则不会影响循环。 但是它并没有说如何在用foreach迭代的时候去除一个元素。 我最好的猜测是这样的: int idx = 0; foreach (const Foo &foo, fooList) { if (bad(foo)) { fooList.removeAt(idx); } ++idx; } 似乎丑陋必须将范围外的idx循环(并必须维护一个单独的循环计数器)。 另外,我知道foreach制作了一个QList的副本,这个版本很便宜,但是一旦我删除了一个元素,会发生什么呢?它还是很便宜的,还是会有昂贵的copy-on-modify呢? 是的, 深层复制发生 。 编辑:这似乎并不像地道的Qt要么。 for (int idx = 0; idx < fooList.size(); ) { const Foo &foo = fooList[idx]; if (bad(foo)) { fooList.removeAt(idx); } else ++idx; }