Класс QMutableLinkedListIterator
Класс QMutableLinkedListIterator предоставляет итератор типа Java для QLinkedList без модификатора const. Подробнее...
| Заголовок: | #include <QMutableLinkedListIterator> |
| qmake: | QT += core |
Открытые функции
| QMutableLinkedListIterator(QLinkedList<T> &list) | |
| 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() |
| QMutableLinkedListIterator<T> & | operator=(QLinkedList<T> &container) |
Подробное описание
Класс QMutableLinkedListIterator предоставляет итератор типа Java для QLinkedList без модификатора const.
QLinkedList имеет как итераторы стиля Java, так и итераторы стиля STL. Итераторы стиля Java более высокого уровня и проще в использовании, чем итераторы стиля STL; с другой стороны, они немного менее эффективны.
QMutableLinkedListIterator<T> позволяет перебирать QLinkedList<T> и изменять список. Если вы не хотите изменять список (или имеете QLinkedList с модификатором const), используйте немного более быстрый QLinkedListIterator<T>.
Конструктор QMutableLinkedListIterator принимает QLinkedList в качестве аргумента. После создания итератор находится в самом начале списка (перед первым элементом). Вот как перебрать все элементы последовательно:
QLinkedList<float> list;
...
QMutableLinkedListIterator<float> i(list);
while (i.hasNext())
qDebug() << i.next(); Функция next() возвращает следующий элемент в списке и перемещает итератор вперёд. В отличие от итераторов стиля STL, итераторы стиля Java указывают *между* элементами, а не *на* элементы. Первый вызов next() перемещает итератор в позицию между первым и вторым элементом и возвращает первый элемент; второй вызов next() перемещает итератор в позицию между вторым и третьим элементом, возвращая второй элемент; и так далее.
Вот как перебрать элементы в обратном порядке:
QMutableLinkedListIterator<float> i(list);
i.toBack();
while (i.hasPrevious())
qDebug() << i.previous(); Если вы хотите найти все вхождения определённого значения, используйте findNext() или findPrevious() в цикле.
Если вы хотите удалять элементы во время перебора списка, используйте remove(). Если вы хотите изменить значение элемента, используйте setValue(). Если вы хотите вставить новый элемент в список, используйте insert().
Пример:
QMutableLinkedListIterator<int> i(list);
while (i.hasNext()) {
int val = i.next();
if (val < 0) {
i.setValue(-val);
} else if (val == 0) {
i.remove();
}
} В примере происходит проход по списку, при этом отрицательные числа заменяются их абсолютными значениями, а нули удаляются.
Только один изменяемый итератор может быть активным для данного списка в любой момент. Кроме того, не следует вносить изменения непосредственно в список во время активности итератора (в отличие от использования итератора), так как это может привести к недействительности итератора и неопределённому поведению.
См. также QLinkedListIterator и QLinkedList::iterator.
Документация по членам функций
void QMutableLinkedListIterator::insert(const T &value)
Вставляет value в текущую позицию итератора. После вызова итератор находится сразу после вставленного элемента.
См. также remove() и setValue().
T &QMutableLinkedListIterator::value()
Это перегруженная функция.
Возвращает ссылку без const на значение последнего элемента, который был пропущен с помощью одной из функций перемещения.
const T &QMutableLinkedListIterator::value() const
Возвращает значение последнего элемента, который был пропущен при использовании одной из функций перемещения (next(), previous(), findNext(), findPrevious()).
После вызова next() или findNext(), value() эквивалентно peekPrevious(). После вызова previous() или findPrevious(), value() эквивалентно peekNext().
bool QMutableLinkedListIterator::findPrevious(const T &value)
Ищет value, начиная с текущей позиции итератора назад. Возвращает true , если value найдено; в противном случае возвращает false.
После вызова, если value было найдено, итератор размещается непосредственно перед совпадающим элементом; в противном случае итератор размещается в начале контейнера.
См. также findNext().
bool QMutableLinkedListIterator::findNext(const T &value)
Ищет value, начиная с текущей позиции итератора вперёд. Возвращает true , если value найдено; в противном случае возвращает false.
После вызова, если value было найдено, итератор размещается непосредственно после совпадающего элемента; в противном случае итератор размещается в конце контейнера.
См. также findPrevious().
T &QMutableLinkedListIterator::peekPrevious() const
Возвращает ссылку на предыдущий элемент без перемещения итератора.
Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределённым результатам.
См. также hasPrevious(), previous(), и peekNext().
T &QMutableLinkedListIterator::previous()
Возвращает ссылку на предыдущий элемент и перемещает итератор назад на одну позицию.
Вызов этой функции для итератора, расположенного в начале контейнера, приводит к неопределённым результатам.
См. также hasPrevious(), peekPrevious(), и next().
bool QMutableLinkedListIterator::hasPrevious() const
Возвращает true , если за итератором есть хотя бы один элемент, т. е. итератор не находится в начале контейнера; в противном случае возвращает false.
См. также hasNext() и previous().
T &QMutableLinkedListIterator::peekNext() const
Возвращает ссылку на следующий элемент, не перемещая итератор.
Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределённым результатам.
См. также hasNext(), next() и peekPrevious().
T &QMutableLinkedListIterator::next()
Возвращает ссылку на следующий элемент и перемещает итератор на одну позицию вперёд.
Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределённым результатам.
См. также hasNext(), peekNext() и previous().
bool QMutableLinkedListIterator::hasNext() const
Возвращает true , если перед итератором есть хотя бы один элемент, то есть итератор не находится в конце контейнера; в противном случае возвращает false.
См. также hasPrevious() и next().
void QMutableLinkedListIterator::toBack()
Перемещает итератор в конец контейнера (после последнего элемента).
См. также toFront() и previous().
void QMutableLinkedListIterator::toFront()
Перемещает итератор в начало контейнера (перед первым элементом).
QMutableLinkedListIterator<T> &QMutableLinkedListIterator::operator=(QLinkedList<T> &container)
Настраивает итератор для работы с list. Итератор устанавливается в начало списка (перед первым элементом).
См. также toFront() и toBack().
QMutableLinkedListIterator::QMutableLinkedListIterator(QLinkedList<T> &list)
Создаёт итератор для обхода list. Итератор устанавливается в начало списка (перед первым элементом).
См. также operator=().
void QMutableLinkedListIterator::remove()
Удаляет последний элемент, над которым было выполнено перемещение с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).
Пример:
QMutableLinkedListIterator<int> i(list);
while (i.hasNext()) {
int val = i.next();
if (val < -32768 || val > 32767)
i.remove();
} См. также insert() и setValue().
void QMutableLinkedListIterator::setValue(const T &value) const
Заменяет значение последнего элемента, над которым было выполнено перемещение с помощью одной из функций обхода, на value.
Функции обхода — next(), previous(), findNext() и findPrevious().
Пример:
QMutableLinkedListIterator<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/archives/qt-5.11/qmutablelinkedlistiterator.html