Qt: возможно ли удаление элементов QList во время итерации с использованием макроса foreach?
Я новичок в Qt и пытаюсь выучить идиомы.
foreach
документация говорит:
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;
}