Класс QMutableListIterator
Класс QMutableListIterator предоставляет итератор в стиле Java, не являющийся константным, для QList и QQueue. Подробнее...
| Заголовок: | #include <QMutableListIterator> |
| qmake: | QT += core |
Открытые функции
| QMutableListIterator(QList<T> &list) | |
| QMutableListIterator<T> & | operator=(QList<T> &container) |
| bool | findNext(const T &value) |
| bool | findPrevious(const T &value) |
| bool | hasNext() const |
| bool | hasPrevious() const |
| void | insert(const T &value) |
| T & | next() |
| T & | peekNext() const |
| T & | peekPrevious() const |
| T & | previous() |
| void | remove() |
| void | setValue(const T &value) const |
| void | toBack() |
| void | toFront() |
| const T & | value() const |
| T & | value() |
Подробное описание
QList имеет как итераторы в стиле Java, так и итераторы в стиле STL. Итераторы в стиле Java более высокого уровня и проще в использовании, чем итераторы в стиле STL; с другой стороны, они немного менее эффективны.
Альтернативой использованию итераторов является использование индексов. Большинство функций-членов QList принимают индекс в качестве первого параметра, что позволяет обращаться к элементам, вставлять и удалять их без использования итераторов.
QMutableListIterator<T> позволяет итерироваться по QList<T> (или QQueue<T>) и изменять список. Если вы не хотите изменять список (или имеете константный QList), используйте немного более быстрый QListIterator<T> вместо него.
Конструктор QMutableListIterator принимает QList в качестве аргумента. После создания итератор находится в самом начале списка (перед первым элементом). Вот как итерироваться по всем элементам последовательно:
QList<float> list;
...
QMutableListIterator<float> i(list);
while (i.hasNext())
qDebug() << i.next(); Функция next() возвращает следующий элемент в списке и перемещает итератор вперёд. В отличие от итераторов в стиле STL, итераторы в стиле Java указывают между элементами, а не непосредственно на элементы. Первый вызов next() перемещает итератор в позицию между первым и вторым элементом и возвращает первый элемент; второй вызов next() перемещает итератор в позицию между вторым и третьим элементом, возвращая второй элемент; и так далее.
Вот как итерироваться по элементам в обратном порядке:
QMutableListIterator<float> i(list);
i.toBack();
while (i.hasPrevious())
qDebug() << i.previous(); Если вы хотите найти все вхождения определённого значения, используйте findNext() или findPrevious() в цикле.
Если вы хотите удалять элементы по мере итерирования по списку, используйте remove(). Если вы хотите изменить значение элемента, используйте setValue(). Если вы хотите вставить новый элемент в список, используйте insert().
Пример:
QMutableListIterator<int> i(list);
while (i.hasNext()) {
int val = i.next();
if (val < 0) {
i.setValue(-val);
} else if (val == 0) {
i.remove();
}
} В примере происходит обход списка, отрицательные числа заменяются их абсолютными значениями, а нули удаляются.
Только один изменяемый итератор может быть активен для данного списка в любое время. Кроме того, не следует вносить изменения непосредственно в список, пока активен итератор (в отличие от изменений через итератор), так как это может сделать итератор недействительным и привести к неопределённому поведению.
См. также QListIterator и QList::iterator.
Документация функций-членов
void QMutableListIterator::insert(const T &value)
Вставляет value в текущую позицию итератора. После вызова итератор находится сразу после вставленного элемента.
См. также remove() и setValue().
T &QMutableListIterator::value()
Это перегруженная функция.
Возвращает неконстантную ссылку на значение последнего элемента, который был пропущен с помощью одной из функций перемещения.
const T &QMutableListIterator::value() const
Возвращает значение последнего элемента, который был пропущен при использовании одной из функций обхода (next(), previous(), findNext(), findPrevious()).
После вызова next() или findNext(), value() эквивалентно peekPrevious(). После вызова previous() или findPrevious(), value() эквивалентно peekNext().
bool QMutableListIterator::findPrevious(const T &value)
Ищет value, начиная с текущей позиции итератора назад. Возвращает true если value найдено; в противном случае возвращает false.
После вызова, если value найдено, итератор устанавливается перед соответствующим элементом; в противном случае итератор устанавливается в начало контейнера.
См. также findNext().
bool QMutableListIterator::findNext(const T &value)
Ищет value, начиная с текущей позиции итератора вперёд. Возвращает true если value найдено; в противном случае возвращает false.
После вызова, если value найдено, итератор устанавливается сразу после соответствующего элемента; в противном случае итератор устанавливается в конец контейнера.
См. также findPrevious().
T &QMutableListIterator::peekPrevious() const
Возвращает ссылку на предыдущий элемент без перемещения итератора.
Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределённым результатам.
См. также hasPrevious(), previous(), и peekNext().
T &QMutableListIterator::previous()
Возвращает ссылку на предыдущий элемент и перемещает итератор назад на одну позицию.
Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределённым результатам.
См. также hasPrevious(), peekPrevious(), и next().
bool QMutableListIterator::hasPrevious() const
Возвращает true если позади итератора есть хотя бы один элемент, т.е. итератор не находится в начале контейнера; в противном случае возвращает false.
См. также hasNext() и previous().
T &QMutableListIterator::peekNext() const
Возвращает ссылку на следующий элемент без перемещения итератора.
Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределённым результатам.
См. также hasNext(), next() и peekPrevious().
T &QMutableListIterator::next()
Возвращает ссылку на следующий элемент и перемещает итератор на одну позицию вперёд.
Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределённому результату.
См. также hasNext(), peekNext() и previous().
bool QMutableListIterator::hasNext() const
Возвращает true если перед итератором есть хотя бы один элемент, т. е. итератор не находится в конце контейнера; в противном случае возвращает false.
См. также hasPrevious() и next().
void QMutableListIterator::toBack()
Перемещает итератор в конец контейнера (после последнего элемента).
См. также toFront() и previous().
void QMutableListIterator::toFront()
Перемещает итератор в начало контейнера (перед первым элементом).
QMutableListIterator<T> &QMutableListIterator::operator=(QList<T> &container)
Заставляет итератор работать с list. Итератор устанавливается в начало списка (перед первым элементом).
См. также toFront() и toBack().
QMutableListIterator::QMutableListIterator(QList<T> &list)
Создаёт итератор для обхода list. Итератор устанавливается в начало списка (перед первым элементом).
См. также operator=().
void QMutableListIterator::remove()
Удаляет последний элемент, над которым был произведён переход с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).
Пример:
QMutableListIterator<int> i(list);
while (i.hasNext()) {
int val = i.next();
if (val < -32768 || val > 32767)
i.remove();
} См. также insert() и setValue().
void QMutableListIterator::setValue(const T &value) const
Заменяет значение последнего элемента, над которым был произведён переход с помощью одной из функций обхода, на value.
Функции обхода — next(), previous(), findNext() и findPrevious().
Пример:
QMutableListIterator<double> i(list);
while (i.hasNext()) {
double val = i.next();
i.setValue(std::sqrt(val));
} См. также value(), remove() и insert().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qmutablelistiterator.html