Spec-Zone.ru › Qt 5.12

Класс QMutableVectorIterator

Класс QMutableVectorIterator предоставляет итератор в стиле Java для не-константного перебора элементов QVector и QStack. Подробнее...

Заголовок: #include <QMutableVectorIterator>
qmake: QT += core
  • Список всех членов, включая наследуемые

Открытые функции

QMutableVectorIterator(QVector<T> &vector)
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()
QMutableVectorIterator<T> & operator=(QVector<T> &container)

Подробное описание

Класс QMutableVectorIterator предоставляет итератор в стиле Java для не-константного перебора элементов QVector и QStack.

QVector имеет как итераторы в стиле Java, так и итераторы в стиле STL. Итераторы в стиле Java более высокого уровня и проще в использовании, чем итераторы в стиле STL; с другой стороны, они немного менее эффективны.

Альтернативой использованию итераторов является использование индексов. Большинство функций-членов QVector принимают индекс в качестве первого параметра, что позволяет получать доступ к элементам, вставлять и удалять их без использования итераторов.

QMutableVectorIterator<T> позволяет перебирать QVector<T> и изменять вектор. Если вы не хотите изменять вектор (или у вас есть константный QVector), используйте немного более быстрый QVectorIterator<T>.

Конструктор QMutableVectorIterator принимает QVector в качестве аргумента. После создания итератор находится в самом начале списка (перед первым элементом). Вот как перебрать все элементы последовательно:

QVector<float> vector;
...
QMutableVectorIterator<float> i(vector);
while (i.hasNext())
    qDebug() << i.next();

Функция next() возвращает следующий элемент в векторе и перемещает итератор вперёд. В отличие от итераторов в стиле STL, итераторы в стиле Java указывают между элементами, а не непосредственно на элементы. Первый вызов next() перемещает итератор в позицию между первым и вторым элементом и возвращает первый элемент; второй вызов next() перемещает итератор в позицию между вторым и третьим элементом, возвращая второй элемент; и так далее.

Вот как перебрать элементы в обратном порядке:

QMutableVectorIterator<float> i(vector);
i.toBack();
while (i.hasPrevious())
    qDebug() << i.previous();

Если вы хотите найти все вхождения определённого значения, используйте findNext() или findPrevious() в цикле.

Если вы хотите удалять элементы по мере перебора вектора, используйте remove(). Если вы хотите изменить значение элемента, используйте setValue(). Если вы хотите вставить новый элемент в вектор, используйте insert().

Пример:

QMutableVectorIterator<int> i(vector);
while (i.hasNext()) {
    int val = i.next();
    if (val < 0) {
        i.setValue(-val);
    } else if (val == 0) {
        i.remove();
    }
}

В примере перебирается вектор, отрицательные числа заменяются на их абсолютные значения, а нули удаляются.

Одновременно на данном векторе может быть активен только один итератор. Кроме того, при активном итераторе не следует изменять вектор напрямую (в обход итератора), так как это может сделать итератор недействительным и привести к неопределённому поведению.

См. также QVectorIterator и QVector::iterator.

Документация по функциям-членам

void QMutableVectorIterator::insert(const T &value)

Вставляет value в текущую позицию итератора. После вызова итератор расположен сразу после вставленного элемента.

См. также remove() и setValue().

T &QMutableVectorIterator::value()

Это перегруженная функция.

Возвращает неконстантную ссылку на значение последнего элемента, над которым была совершена операция перемещения с помощью одной из функций обхода.

const T &QMutableVectorIterator::value() const

Возвращает значение последнего элемента, над которым была совершена операция перемещения с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).

После вызова next() или findNext(), value() эквивалентна peekPrevious(). После вызова previous() или findPrevious(), value() эквивалентна peekNext().

bool QMutableVectorIterator::findPrevious(const T &value)

Ищет value, начиная с текущей позиции итератора в обратном направлении. Возвращает true , если value найдено; в противном случае возвращает false.

После вызова, если value найдено, итератор устанавливается сразу перед соответствующим элементом; в противном случае итератор устанавливается в начало контейнера.

См. также findNext().

bool QMutableVectorIterator::findNext(const T &value)

Ищет value, начиная с текущей позиции итератора в прямом направлении. Возвращает true , если value найдено; в противном случае возвращает false.

После вызова, если value найдено, итератор устанавливается сразу после соответствующего элемента; в противном случае итератор устанавливается в конец контейнера.

См. также findPrevious().

T &QMutableVectorIterator::peekPrevious() const

Возвращает ссылку на предыдущий элемент, не перемещая итератор.

Вызов этой функции для итератора, находящегося в начале контейнера, приводит к неопределённым результатам.

См. также hasPrevious(), previous(), и peekNext().

T &QMutableVectorIterator::previous()

Возвращает ссылку на предыдущий элемент и перемещает итератор назад на одну позицию.

Вызов этой функции для итератора, находящегося в начале контейнера, приводит к неопределённым результатам.

См. также hasPrevious(), peekPrevious(), и next().

bool QMutableVectorIterator::hasPrevious() const

Возвращает true , если за итератором есть хотя бы один элемент, т.е. итератор не находится в начале контейнера; в противном случае возвращает false.

См. также hasNext() и previous().

T &QMutableVectorIterator::peekNext() const

Возвращает ссылку на следующий элемент, не перемещая итератор.

Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределенным результатам.

См. также hasNext(), next() и peekPrevious().

T &QMutableVectorIterator::next()

Возвращает ссылку на следующий элемент и продвигает итератор на одну позицию вперёд.

Вызов этой функции для итератора, расположенного в конце контейнера, приводит к неопределенным результатам.

См. также hasNext(), peekNext() и previous().

bool QMutableVectorIterator::hasNext() const

Возвращает true значение, если перед итератором есть хотя бы один элемент, то есть итератор не находится в конце контейнера; в противном случае возвращает false.

См. также hasPrevious() и next().

void QMutableVectorIterator::toBack()

Перемещает итератор в конец контейнера (после последнего элемента).

См. также toFront() и previous().

void QMutableVectorIterator::toFront()

Перемещает итератор в начало контейнера (перед первым элементом).

См. также toBack() и next().

QMutableVectorIterator<T> &QMutableVectorIterator::operator=(QVector<T> &container)

Настраивает итератор для работы с вектором. Итератор устанавливается в начало вектора (перед первым элементом).

См. также toFront() и toBack().

QMutableVectorIterator::QMutableVectorIterator(QVector<T> &vector)

Создаёт итератор для обхода вектора. Итератор устанавливается в начало вектора (перед первым элементом).

См. также operator=().

void QMutableVectorIterator::remove()

Удаляет последний элемент, над которым была выполнена операция перемещения с помощью одной из функций обхода (next(), previous(), findNext(), findPrevious()).

Пример:

QMutableVectorIterator<int> i(vector);
while (i.hasNext()) {
    int val = i.next();
    if (val < -32768 || val > 32767)
        i.remove();
}

См. также insert() и setValue().

void QMutableVectorIterator::setValue(const T &value) const

Заменяет значение последнего элемента, над которым была выполнена операция перемещения с помощью одной из функций обхода, на значение.

Функции обхода — next(), previous(), findNext() и findPrevious().

Пример:

QMutableVectorIterator<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/qmutablevectoriterator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API