Удаление из QList

Автор: | 23 июля, 2019

Удаление нескольких элементов из 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() продвигает итератор на позицию между вторым и третьим элементом, возвращая второй элемент и так далее.