Удаление нескольких элементов из QList при помощи итератора QMutableListIterator
В QList есть и итераторы в стиле Java, и итераторы в стиле STL. Итераторы в стиле Java являются более высокоуровневыми и более простыми в использовании, чем итераторы в стиле STL, с другой стороны, они немного менее эффективны. Альтернативой использованию итераторов является использование позиций индекса. Большинство функций-членов QList принимают индекс в качестве первого параметра, что позволяет получать доступ, вставлять и удалять элементы без использования итераторов. QMutableListIterator <T> позволяет перебирать QList <T> и изменять список. Если нет необходимости изменять список, можно использовать чуть более быстрый QListIterator <T>. Конструктор QMutableListIterator принимает QList в качестве аргумента. После построения итератор находится в самом начале списка.
Фрагмент кода, который удаляет все значения больше 20:
QList <int> list; list << 2 << 11 << 54 << 3 << 6 << 2 << 76 << 11 << 3 << 2; QMutableListIterator<int> i(list); while(i.hasNext()) { int currentValue=i.next(); if(currentValue>10) i.remove(); } qDebug() << list;
Функция next() возвращает следующий элемент в списке и продвигает итератор. В отличие от итераторов в стиле STL, итераторы в стиле Java указывают между элементами, а не непосредственно на элементы.
Первый вызов next() переводит итератор в положение между первым и вторым элементом и возвращает первый элемент; второй вызов next() продвигает итератор на позицию между вторым и третьим элементом, возвращая второй элемент и так далее.