Класс 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 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/qt-5.12/qmutablelinkedlistiterator.html