Spec-Zone.ru › Qt 5.15

Класс QVector

шаблон <typename T> класс QVector

Класс QVector — это шаблонный класс, предоставляющий динамический массив. Подробнее...

Заголовок: #include <QVector>
qmake: QT += core
Наследуется от:

QPolygon, QPolygonF, QStack, QVulkanInfoVector и QXmlStreamAttributes

  • Список всех членов, включая наследуемые

Примечание: Все функции в этом классе являются повторно входящими.

Открытые типы

typedef ConstIterator
typedef Iterator
typedef const_iterator
typedef const_pointer
typedef const_reference
typedef const_reverse_iterator
typedef difference_type
typedef iterator
typedef pointer
typedef reference
typedef reverse_iterator
typedef size_type
typedef value_type

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

QVector(InputIterator first, InputIterator last)
QVector(std::initializer_list<T> args)
QVector(QVector<T> &&other)
QVector(const QVector<T> &other)
QVector(int size, const T &value)
QVector(int size)
QVector()
QVector<T> & operator=(QVector<T> &&other)
QVector<T> & operator=(const QVector<T> &other)
~QVector()
void append(const T &value)
void append(T &&value)
void append(const QVector<T> &value)
const T & at(int i) const
QVector::reference back()
QVector::const_reference back() const
QVector::iterator begin()
QVector::const_iterator begin() const
int capacity() const
QVector::const_iterator cbegin() const
QVector::const_iterator cend() const
void clear()
QVector::const_iterator constBegin() const
const T * constData() const
QVector::const_iterator constEnd() const
const T & constFirst() const
const T & constLast() const
bool contains(const T &value) const
int count(const T &value) const
int count() const
QVector::const_reverse_iterator crbegin() const
QVector::const_reverse_iterator crend() const
T * data()
const T * data() const
bool empty() const
QVector::iterator end()
QVector::const_iterator end() const
bool endsWith(const T &value) const
QVector::iterator erase(QVector::iterator pos)
QVector::iterator erase(QVector::iterator begin, QVector::iterator end)
QVector<T> & fill(const T &value, int size = -1)
T & first()
const T & first() const
T & front()
QVector::const_reference front() const
int indexOf(const T &value, int from = 0) const
void insert(int i, T &&value)
void insert(int i, const T &value)
void insert(int i, int count, const T &value)
QVector::iterator insert(QVector::iterator before, int count, const T &value)
QVector::iterator insert(QVector::iterator before, const T &value)
QVector::iterator insert(QVector::iterator before, T &&value)
bool isEmpty() const
T & last()
const T & last() const
int lastIndexOf(const T &value, int from = -1) const
int length() const
QVector<T> mid(int pos, int length = -1) const
void move(int from, int to)
void pop_back()
void pop_front()
void prepend(T &&value)
void prepend(const T &value)
void push_back(const T &value)
void push_back(T &&value)
void push_front(T &&value)
void push_front(const T &value)
QVector::reverse_iterator rbegin()
QVector::const_reverse_iterator rbegin() const
void remove(int i)
void remove(int i, int count)
int removeAll(const T &t)
void removeAt(int i)
void removeFirst()
void removeLast()
bool removeOne(const T &t)
QVector::reverse_iterator rend()
QVector::const_reverse_iterator rend() const
void replace(int i, const T &value)
void reserve(int size)
void resize(int size)
void shrink_to_fit()
int size() const
void squeeze()
bool startsWith(const T &value) const
void swap(QVector<T> &other)
void swapItemsAt(int i, int j)
T takeAt(int i)
T takeFirst()
T takeLast()
QList<T> toList() const
std::vector<T> toStdVector() const
T value(int i) const
T value(int i, const T &defaultValue) const
bool operator!=(const QVector<T> &other) const
QVector<T> operator+(const QVector<T> &other) const
QVector<T> & operator+=(const QVector<T> &other)
QVector<T> & operator+=(const T &value)
QVector<T> & operator+=(T &&value)
QVector<T> & operator<<(const T &value)
QVector<T> & operator<<(const QVector<T> &other)
QVector<T> & operator<<(T &&value)
QVector<T> & operator=(std::initializer_list<T> args)
bool operator==(const QVector<T> &other) const
T & operator[](int i)
const T & operator[](int i) const

Статические публичные члены

QVector<T> fromList(const QList<T> &list)
QVector<T> fromStdVector(const std::vector<T> &vector)

Связанные нечлены

uint qHash(const QVector<T> &key, uint seed = 0)
bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
QDataStream & operator<<(QDataStream &out, const QVector<T> &vector)
bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
QDataStream & operator>>(QDataStream &in, QVector<T> &vector)

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

QVector<T> — один из обобщённых классов контейнеров Qt. Он хранит свои элементы в смежных ячейках памяти и обеспечивает быстрый доступ по индексу.

QList<T>, QLinkedList<T>, QVector<T> и QVarLengthArray<T> предоставляют схожие API и функциональность. Они часто взаимозаменяемы, но существуют последствия для производительности. Вот обзор вариантов использования:

  • QVector — ваш предпочтительный вариант по умолчанию. QVector<T> обычно обеспечивает лучшую производительность, чем QList<T>, так как QVector<T> всегда хранит свои элементы последовательно в памяти, в то время как QList<T> выделяет свои элементы в куче, если sizeof(T) <= sizeof(void*) и T объявлен как Q_MOVABLE_TYPE или Q_PRIMITIVE_TYPE с помощью Q_DECLARE_TYPEINFO. Смотрите Плюсы и минусы использования QList для объяснения.
  • Однако, QList используется во всех API Qt для передачи параметров и возврата значений. Используйте QList для взаимодействия с этими API.
  • Если вам нужна реальная связанная структура данных, которая гарантирует постоянное время вставки посередине списка и использует итераторы, а не индексы, используйте QLinkedList.

Примечание: QVector и QVarLengthArray гарантируют совместимость с массивами C. QList не гарантирует этого. Это может быть важно, если ваше приложение должно взаимодействовать с API C.

Примечание: Итераторы в QLinkedList и ссылки на элементы в QLists, выделяющих память в куче, остаются действительными до тех пор, пока соответствующие элементы остаются в контейнере. Это не относится к итераторам и ссылкам на элементы в QVector и QLists, не выделяющих память в куче.

Вот пример QVector, хранящего целые числа, и QVector, хранящего значения QString:

QVector<int> integerVector;
QVector<QString> stringVector;

QVector хранит свои элементы в векторе (массиве). Обычно векторы создаются с начальным размером. Например, следующий код создаёт QVector с 200 элементами:

QVector<QString> vector(200);

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

QVector<QString> vector(200, "Pass");

Вы также можете в любое время вызвать fill() для заполнения вектора значением.

QVector использует индексы, начинающиеся с 0, как и массивы в C++. Для доступа к элементу по определённому индексу можно использовать оператор[](). Для неконстантных векторов оператор[]() возвращает ссылку на элемент, которую можно использовать в левой части присваивания:

if (vector[0] == "Liz")
    vector[0] = "Elizabeth";

Для чтения без изменения содержимого альтернативной синтаксис — использование at():

for (int i = 0; i < vector.size(); ++i) {
    if (vector.at(i) == "Alfonso")
        cout << "Found Alfonso at position " << i << Qt::endl;
}

at() может быть быстрее, чем оператор[](), поскольку он никогда не вызывает глубокое копирование.

Ещё один способ доступа к данным, хранящимся в QVector, — вызов data(). Функция возвращает указатель на первый элемент в векторе. Вы можете использовать указатель для прямого доступа и изменения элементов, хранящихся в векторе. Указатель также полезен, если вам нужно передать QVector в функцию, принимающую обычный массив C++.

Если вы хотите найти все вхождения определённого значения в векторе, используйте indexOf() или lastIndexOf(). Первый выполняет поиск вперёд, начиная с заданной позиции индекса, второй — назад. Оба возвращают индекс соответствующего элемента, если он найден; в противном случае возвращают -1. Например:

int i = vector.indexOf("Harumi");
if (i != -1)
    cout << "First occurrence of Harumi is at position " << i << Qt::endl;

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

QVector предоставляет эти базовые функции для добавления, перемещения и удаления элементов: insert(), replace(), remove(), prepend(), append(). За исключением append() и replace(), эти функции могут быть медленными (линейное время) для больших векторов, так как они требуют перемещения многих элементов в векторе на одну позицию в памяти. Если вам нужен класс контейнера, который обеспечивает быструю вставку/удаление в середине, используйте QList или QLinkedList.

В отличие от обычных массивов C++, QVector может быть изменён в любой момент путём вызова resize(). Если новый размер больше старого, QVector может потребоваться перевыделить весь вектор. QVector пытается уменьшить количество перевыделений путём предварительной выделения до удвоения объёма памяти по сравнению с фактически необходимым.

Если вы заранее приблизительно знаете, сколько элементов будет содержать QVector, вы можете вызвать reserve(), попросив QVector предварительно выделить определённое количество памяти. Вы также можете вызвать capacity(), чтобы узнать, сколько памяти фактически выделил QVector.

Обратите внимание, что использование неконстантных операторов и функций может привести к тому, что QVector выполнит глубокое копирование данных. Это связано с явным совместным использованием.

Тип значения QVector должен быть типом, допускающим присваивание. Это относится к большинству типов данных, которые обычно используются, но компилятор не позволит вам, например, хранить QWidget в качестве значения; вместо этого храните QWidget *. У некоторых функций есть дополнительные требования; например, indexOf() и lastIndexOf() ожидают, что тип значения будет поддерживать operator==(). Эти требования документированы для каждой функции.

Как и другие классы контейнеров, QVector предоставляет итераторы в стиле Java (QVectorIterator и QMutableVectorIterator) и итераторы в стиле STL (QVector::const_iterator и QVector::iterator). На практике они редко используются, поскольку вы можете использовать индексы в QVector.

Помимо QVector, Qt также предоставляет QVarLengthArray, класс очень низкого уровня с небольшим функционалом, оптимизированный для скорости.

QVector не поддерживает вставку, добавление в начало, добавление в конец или замену с помощью ссылок на свои собственные значения. Это приведёт к аварийному завершению приложения с сообщением об ошибке.

Дополнительная информация об использовании контейнеров Qt

Подробное сравнение контейнеров Qt друг с другом и с контейнерами STL см. в Understand the Qt Containers.

Максимальный размер и условия отсутствия памяти

Текущая версия QVector ограничена чуть менее 2 ГБ (2^31 байт) размером. Точное значение зависит от архитектуры, так как оно зависит от накладных расходов на управление блоком данных, но не превышает 32 байт. Количество элементов, которые могут быть сохранены в QVector, равно этому размеру, делённому на размер каждого элемента.

В случае неудачи выделения памяти QVector использует макрос Q_CHECK_PTR, который сгенерирует исключение std::bad_alloc при компиляции приложения с поддержкой исключений. Если исключения отключены, то отсутствие памяти — неопределённое поведение.

Обратите внимание, что операционная система может устанавливать дополнительные ограничения на приложения, которые хранят большое количество выделенной памяти, особенно большие смежные блоки. Такие соображения, конфигурация такого поведения или любые способы минимизации выходят за рамки API Qt.

См. также QVectorIterator, QMutableVectorIterator, QList и QLinkedList.

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

typedef QVector::ConstIterator

Синоним в стиле Qt для QVector::const_iterator.

typedef QVector::Iterator

Синоним в стиле Qt для QVector::iterator.

typedef QVector::const_iterator

QVector::const_iterator предоставляет итератор в стиле STL для QVector и QStack.

QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Итератор const в стиле STL — это просто псевдоним для "const T *" (указатель на const T).

Предупреждение: Итераторы в контейнерах с явным совместным использованием не работают точно так же, как итераторы STL. Следует избегать копирования контейнера во время активности итераторов в этом контейнере. Более подробную информацию см. в Проблеме итераторов с явным совместным использованием.

См. также QVector::constBegin(), QVector::constEnd(), QVector::iterator и QVectorIterator.

typedef QVector::const_pointer

Псевдоним для const T *. Предоставляется для совместимости со STL.

typedef QVector::const_reference

Псевдоним для T &. Предоставляется для совместимости со STL.

typedef QVector::const_reverse_iterator

QVector::const_reverse_iterator предоставляет итератор в стиле STL для обратного перебора для QVector.

Это просто псевдоним для std::reverse_iterator<const T*>.

Предупреждение: Итераторы в контейнерах с явным совместным использованием не работают точно так же, как итераторы STL. Следует избегать копирования контейнера во время активности итераторов в этом контейнере. Более подробную информацию см. в Проблеме итераторов с явным совместным использованием.

Этот псевдоним был введён в Qt 5.6.

См. также QVector::rbegin(), QVector::rend(), QVector::reverse_iterator и QVector::const_iterator.

typedef QVector::difference_type

Псевдоним для ptrdiff_t. Предоставляется для совместимости со STL.

typedef QVector::iterator

QVector::iterator предоставляет итератор в стиле STL для QVector и QStack.

QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Итератор non-const в стиле STL — это просто псевдоним для "T *" (указатель на T).

Предупреждение: Итераторы в контейнерах с явным совместным использованием не работают точно так же, как итераторы STL. Следует избегать копирования контейнера во время активности итераторов в этом контейнере. Более подробную информацию см. в Проблеме итераторов с явным совместным использованием.

См. также QVector::begin(), QVector::end(), QVector::const_iterator и QMutableVectorIterator.

typedef QVector::pointer

Псевдоним для T *. Предоставляется для совместимости со STL.

typedef QVector::reference

Псевдоним для T &. Предоставляется для совместимости со STL.

typedef QVector::reverse_iterator

QVector::reverse_iterator предоставляет итератор в стиле STL для обратного перебора для QVector.

Это просто псевдоним для std::reverse_iterator<T*>.

Предупреждение: Итераторы в контейнерах с явным совместным использованием не работают точно так же, как итераторы STL. Следует избегать копирования контейнера во время активности итераторов в этом контейнере. Более подробную информацию см. в Проблеме итераторов с явным совместным использованием.

Этот псевдоним был введён в Qt 5.6.

См. также QVector::rbegin(), QVector::rend(), QVector::const_reverse_iterator, и QVector::iterator.

typedef QVector::size_type

Тип-синоним для int. Предоставлен для совместимости со STL.

typedef QVector::value_type

Тип-синоним для T. Предоставлен для совместимости со STL.

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

void QVector::push_front(T &&value)

void QVector::push_front(const T &value)

Эта функция предоставлена для совместимости со STL. Она эквивалентна prepend(value).

QVector::iterator QVector::insert(QVector::iterator before, T &&value)

QVector::iterator QVector::insert(QVector::iterator before, const T &value)

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

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

void QVector::insert(int i, T &&value)

void QVector::insert(int i, const T &value)

Вставляет value в позицию с индексом i в векторе. Если i равно 0, значение вставляется в начало вектора. Если i равно size(), значение вставляется в конец вектора.

Пример:

QVector<QString> vector;
vector << "alpha" << "beta" << "delta";
vector.insert(2, "gamma");
// vector: ["alpha", "beta", "gamma", "delta"]

Для больших векторов эта операция может быть медленной (линейное время), поскольку требуется перемещение всех элементов с индексами i и выше на одну позицию дальше в памяти. Если вам нужен класс контейнера, предоставляющий быструю функцию insert(), используйте QLinkedList вместо этого.

См. также append(), prepend(), и remove().

void QVector::prepend(T &&value)

void QVector::prepend(const T &value)

Вставляет value в начало вектора.

Пример:

QVector<QString> vector;
vector.prepend("one");
vector.prepend("two");
vector.prepend("three");
// vector: ["three", "two", "one"]

Это то же самое, что vector.insert(0, value).

Для больших векторов эта операция может быть медленной (линейное время), потому что она требует перемещения всех элементов вектора на одну позицию дальше в памяти. Если вам нужен класс контейнера, который обеспечивает быструю функцию prepend(), используйте QList или QLinkedList вместо этого.

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

template <typename InputIterator> QVector::QVector(InputIterator first, InputIterator last)

Создает вектор с содержимым в диапазоне итераторов [first, last).

Тип значения InputIterator должен быть приводимым к типу T.

Эта функция была добавлена в Qt 5.14.

QVector::QVector(std::initializer_list<T> args)

Создает вектор из std::initializer_list, заданной args.

Этот конструктор включен только если компилятор поддерживает C++11 initializer lists.

Эта функция была добавлена в Qt 4.8.

QVector::QVector(QVector<T> &&other)

Перемещающий конструктор QVector, делающий его указывающим на тот же объект, на который указывал other.

Эта функция была добавлена в Qt 5.2.

QVector::QVector(const QVector<T> &other)

Создаёт копию other.

Эта операция выполняется за постоянное время, так как QVector использует неявное совместное использование. Это делает возврат QVector из функции очень быстрым. Если изменён общий экземпляр, он будет скопирован (copy-on-write), и это занимает линейное время.

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

QVector::QVector(int size, const T &value)

Создаёт вектор с начальным размером size элементов. Каждый элемент инициализируется значением value.

См. также resize() и fill().

QVector::QVector(int size)

Создаёт вектор с начальным размером size элементов.

Элементы инициализируются с использованием значения по умолчанию.

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

QVector::QVector()

Создаёт пустой вектор.

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

QVector<T> &QVector::operator=(QVector<T> &&other)

Перемещающее присваивание other этому экземпляру QVector.

Эта функция была добавлена в Qt 5.2.

QVector<T> &QVector::operator=(const QVector<T> &other)

Присваивает other этому вектору и возвращает ссылку на этот вектор.

QVector::~QVector()

Уничтожает вектор.

void QVector::append(const T &value)

Вставляет value в конец вектора.

Пример:

QVector<QString> vector;
vector.append("one");
vector.append("two");
QString three = "three";
vector.append(three);
// vector: ["one", "two", "three"]
// three: "three"

Это то же самое, что вызов resize(size() + 1) и присваивание value новому последнему элементу в векторе.

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

См. также operator<<(), prepend(), и insert().

void QVector::append(T &&value)

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

Пример:

QVector<QString> vector;
vector.append("one");
vector.append("two");
QString three = "three";
vector.append(std::move(three));
// vector: ["one", "two", "three"]
// three: ""

Эта функция была добавлена в Qt 5.6.

void QVector::append(const QVector<T> &value)

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

Добавляет элементы вектора value в этот вектор.

Эта функция была добавлена в Qt 5.5.

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

const T &QVector::at(int i) const

Возвращает элемент с индексом i в векторе.

i должен быть допустимым индексом в векторе (т. е., 0 <= i < size()).

См. также value() и operator[]().

QVector::reference QVector::back()

Эта функция предоставлена для совместимости со STL. Она эквивалентна last().

QVector::const_reference QVector::back() const

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

QVector::iterator QVector::begin()

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

См. также constBegin() и end().

QVector::const_iterator QVector::begin() const

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

int QVector::capacity() const

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

Единственная цель этой функции — предоставить способ точной настройки использования памяти QVector. Как правило, вам редко понадобится вызывать эту функцию. Если вы хотите узнать, сколько элементов находится в векторе, вызовите size().

См. также reserve() и squeeze().

QVector::const_iterator QVector::cbegin() const

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

Эта функция была добавлена в Qt 5.0.

См. также begin() и cend().

QVector::const_iterator QVector::cend() const

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

Данная функция была добавлена в Qt 5.0.

См. также cbegin() и end().

void QVector::clear()

Удаляет все элементы из вектора.

Примечание: До Qt 5.6 это также освобождало память, используемую вектором. С Qt 5.7 емкость сохраняется. Чтобы освободить всю емкость, выполните обмен с вектором, созданным по умолчанию:

QVector<T> v ...;
QVector<T>().swap(v);
Q_ASSERT(v.capacity() == 0);

или вызовите squeeze().

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

QVector::const_iterator QVector::constBegin() const

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

См. также begin() и constEnd().

const T *QVector::constData() const

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

Данная функция в основном полезна для передачи вектора функции, принимающей обычный массив C++.

См. также data() и operator[]().

QVector::const_iterator QVector::constEnd() const

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

См. также constBegin() и end().

const T &QVector::constFirst() const

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

Данная функция была добавлена в Qt 5.6.

См. также constLast(), isEmpty() и first().

const T &QVector::constLast() const

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

Данная функция была добавлена в Qt 5.6.

См. также constFirst(), isEmpty() и last().

bool QVector::contains(const T &value) const

Возвращает true если вектор содержит вхождение value; в противном случае возвращает false.

Эта функция требует, чтобы тип значения имел реализацию operator==().

См. также indexOf() и count().

int QVector::count(const T &value) const

Возвращает количество вхождений value в векторе.

Эта функция требует, чтобы тип значения имел реализацию operator==().

См. также contains() и indexOf().

int QVector::count() const

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

То же, что и size().

QVector::const_reverse_iterator QVector::crbegin() const

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

Данная функция была добавлена в Qt 5.6.

См. также begin(), rbegin() и rend().

QVector::const_reverse_iterator QVector::crend() const

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

Данная функция была добавлена в Qt 5.6.

См. также end(), rend() и rbegin().

T *QVector::data()

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

Пример:

QVector<int> vector(10);
int *data = vector.data();
for (int i = 0; i < 10; ++i)
    data[i] = 2 * i;

Указатель остается допустимым, пока вектор не перераспределяется.

Данная функция в основном полезна для передачи вектора функции, принимающей обычный массив C++.

См. также constData() и operator[]().

const T *QVector::data() const

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

bool QVector::empty() const

Эта функция предоставлена для совместимости со STL. Она эквивалентна isEmpty(), возвращая true если вектор пустой; в противном случае возвращает false.

QVector::iterator QVector::end()

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

См. также begin() и constEnd().

QVector::const_iterator QVector::end() const

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

bool QVector::endsWith(const T &value) const

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

Данная функция была добавлена в Qt 4.5.

См. также isEmpty() и last().

QVector::iterator QVector::erase(QVector::iterator pos)

Удаляет элемент, на который указывает итератор pos из вектора и возвращает итератор на следующий элемент в векторе (который может быть end()).

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

QVector::iterator QVector::erase(QVector::iterator begin, QVector::iterator end)

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

Удаляет все элементы от begin до (но не включая) end. Возвращает итератор на тот же элемент, на который end ссылался до вызова.

QVector<T> &QVector::fill(const T &value, int size = -1)

Присваивает value всем элементам вектора. Если size отличается от -1 (по умолчанию), размер вектора предварительно изменяется на size.

Пример:

QVector<QString> vector(3);
vector.fill("Yes");
// vector: ["Yes", "Yes", "Yes"]

vector.fill("oh", 5);
// vector: ["oh", "oh", "oh", "oh", "oh"]

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

T &QVector::first()

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

См. также last(), isEmpty() и constFirst().

const T &QVector::first() const

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

[static] QVector<T> QVector::fromList(const QList<T> &list)

Возвращает объект QVector с данными, содержащимися в list.

Пример:

QStringList list;
list << "Sven" << "Kim" << "Ola";

QVector<QString> vect = QVector<QString>::fromList(list);
// vect: ["Sven", "Kim", "Ola"]

Примечание: С Qt 5.14 доступны конструкторы диапазонов для общих контейнерных классов Qt и их следует использовать вместо этого метода.

См. также toList() и QList::toVector().

[static] QVector<T> QVector::fromStdVector(const std::vector<T> &vector)

Возвращает объект QVector с данными, содержащимися в vector. Порядок элементов в QVector такой же, как в vector.

Пример:

std::vector<double> stdvector;
vector.push_back(1.2);
vector.push_back(0.5);
vector.push_back(3.14);

QVector<double> vector = QVector<double>::fromStdVector(stdvector);

Примечание: С Qt 5.14 доступны конструкторы диапазонов для общих контейнерных классов Qt и их следует использовать вместо этого метода.

См. также toStdVector() и QList::fromStdList().

T &QVector::front()

Данная функция предоставлена для совместимости со STL. Она эквивалентна first().

QVector::const_reference QVector::front() const

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

int QVector::indexOf(const T &value, int from = 0) const

Возвращает позицию индекса первого вхождения value в вектор, начиная поиск с позиции индекса from. Возвращает -1, если элемент не найден.

Пример:

QVector<QString> vector;
vector << "A" << "B" << "C" << "B" << "A";
vector.indexOf("B");            // returns 1
vector.indexOf("B", 1);         // returns 1
vector.indexOf("B", 2);         // returns 3
vector.indexOf("X");            // returns -1

Для этой функции требуется, чтобы тип значения имел реализацию operator==().

См. также lastIndexOf() и contains().

void QVector::insert(int i, int count, const T &value)

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

Вставляет count копий value на позицию индекса i в вектор.

Пример:

QVector<double> vector;
vector << 2.718 << 1.442 << 0.4342;
vector.insert(1, 3, 9.9);
// vector: [2.718, 9.9, 9.9, 9.9, 1.442, 0.4342]

QVector::iterator QVector::insert(QVector::iterator before, int count, const T &value)

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

bool QVector::isEmpty() const

Возвращает true, если размер вектора равен 0; в противном случае возвращает false.

См. также size() и resize().

T &QVector::last()

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

См. также first(), isEmpty() и constLast().

const T &QVector::last() const

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

int QVector::lastIndexOf(const T &value, int from = -1) const

Возвращает позицию индекса последнего вхождения значения value в векторе, выполняя поиск назад с позиции индекса from. Если from равно -1 (значение по умолчанию), поиск начинается с последнего элемента. Возвращает -1, если элемент не найден.

Пример:

QList<QString> vector;
vector << "A" << "B" << "C" << "B" << "A";
vector.lastIndexOf("B");        // returns 3
vector.lastIndexOf("B", 3);     // returns 3
vector.lastIndexOf("B", 2);     // returns 1
vector.lastIndexOf("X");        // returns -1

Для этой функции требуется, чтобы тип значения имел реализацию operator==().

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

int QVector::length() const

То же самое, что size() и count().

Предоставлено для совместимости с QList.

Эта функция была добавлена в Qt 5.2.

См. также size(), count() и QList::length().

QVector<T> QVector::mid(int pos, int length = -1) const

Возвращает подвектор, содержащий элементы из этого вектора, начиная с позиции pos. Если length равно -1 (по умолчанию), включаются все элементы после pos; в противном случае включается length элементов (или все оставшиеся элементы, если их меньше, чем length).

void QVector::move(int from, int to)

Перемещает элемент с позиции индекса from на позицию индекса to.

Предоставлено для совместимости с QList.

Эта функция была добавлена в Qt 5.6.

См. также QList::move().

void QVector::pop_back()

Эта функция предоставляется для совместимости со стандартной библиотекой шаблонов (STL). Она эквивалентна removeLast().

void QVector::pop_front()

Эта функция предоставляется для совместимости со стандартной библиотекой шаблонов (STL). Она эквивалентна removeFirst().

void QVector::push_back(const T &value)

Эта функция предоставляется для совместимости со стандартной библиотекой шаблонов (STL). Она эквивалентна append(value).

void QVector::push_back(T &&value)

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

Эта функция была добавлена в Qt 5.6.

QVector::reverse_iterator QVector::rbegin()

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

Эта функция была добавлена в Qt 5.6.

См. также begin(), crbegin() и rend().

QVector::const_reverse_iterator QVector::rbegin() const

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

Эта функция была добавлена в Qt 5.6.

void QVector::remove(int i)

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

Удаляет элемент по позиции индекса i.

См. также insert(), replace() и fill().

void QVector::remove(int i, int count)

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

Удаляет count элементов из середины вектора, начиная с позиции индекса i.

См. также insert(), replace() и fill().

int QVector::removeAll(const T &t)

Удаляет все элементы, равные t, из вектора. Возвращает количество удаленных элементов, если таковые имеются.

Предоставлено для совместимости с QList.

Эта функция была добавлена в Qt 5.4.

См. также removeOne() и QList::removeAll().

void QVector::removeAt(int i)

Удаляет элемент по позиции индекса i. Эквивалентно

remove(i);

Предоставлено для совместимости с QList.

Эта функция была добавлена в Qt 5.2.

См. также remove() и QList::removeAt().

void QVector::removeFirst()

Удаляет первый элемент в векторе. Вызов этой функции эквивалентен вызову remove(0). Вектор не должен быть пустым. Если вектор может быть пустым, вызовите isEmpty() перед вызовом этой функции.

Эта функция была добавлена в Qt 5.1.

См. также remove(), takeFirst() и isEmpty().

void QVector::removeLast()

Удаляет последний элемент в векторе. Вызов этой функции эквивалентен вызову remove(size() - 1). Вектор не должен быть пустым. Если вектор может быть пустым, вызовите isEmpty() перед вызовом этой функции.

Эта функция была добавлена в Qt 5.1.

См. также remove(), takeLast(), removeFirst() и isEmpty().

bool QVector::removeOne(const T &t)

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

Предоставлено для совместимости с QList.

Эта функция была добавлена в Qt 5.4.

См. также removeAll() и QList::removeOne().

QVector::reverse_iterator QVector::rend()

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

Эта функция была добавлена в Qt 5.6.

См. также end(), crend() и rbegin().

QVector::const_reverse_iterator QVector::rend() const

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

Эта функция была добавлена в Qt 5.6.

void QVector::replace(int i, const T &value)

Заменяет элемент по позиции индекса i значением value.

i должен быть допустимой позицией индекса в векторе (т. е., 0 ≤ i < size()).

См. также operator[]() и remove().

void QVector::reserve(int size)

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

Если size является заниженной оценкой, худшее, что произойдет, это то, что QVector будет немного медленнее. Если size является завышенной оценкой, вы можете использовать больше памяти, чем потребовала бы обычная стратегия роста QVector — или, возможно, меньше.

Альтернативой reserve() является вызов resize(). Быстрее ли resize() по сравнению с reserve() зависит от типа элементов, так как resize() по умолчанию создает все элементы, а для существующих записей требуется присваивание, а не вызов append(), который выполняет копирование или перемещение конструкторов. Для простых типов, таких как int или double, resize() обычно быстрее, но для чего-то более сложного вы должны предпочесть reserve().

Предупреждение: Если размер, переданный resize(), был недооценен, вы столкнётесь с недостатком выделенной памяти и не определённым поведением. Эта проблема не возникает с reserve(), так как она рассматривает размер только как подсказку.

См. также squeeze() и capacity().

void QVector::resize(int size)

Устанавливает размер вектора в size. Если size больше текущего размера, элементы добавляются в конец; новые элементы инициализируются с помощью значения по умолчанию. Если size меньше текущего размера, элементы удаляются с конца.

С Qt 5.6, resize() больше не уменьшает емкость. Чтобы избавиться от избыточной емкости, используйте squeeze().

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

void QVector::shrink_to_fit()

Эта функция предоставляется для совместимости со STL. Она эквивалентна squeeze().

Эта функция была введена в Qt 5.10.

int QVector::size() const

Возвращает количество элементов в векторе.

См. также isEmpty() и resize().

void QVector::squeeze()

Освобождает память, не необходимую для хранения элементов.

Единственная цель этой функции — предоставить способ тонкой настройки использования памяти QVector. Как правило, вам редко понадобится вызывать эту функцию.

См. также reserve() и capacity().

bool QVector::startsWith(const T &value) const

Возвращает true если этот вектор не пуст и его первый элемент равен value; в противном случае возвращает false.

Эта функция была введена в Qt 4.5.

См. также isEmpty() и first().

void QVector::swap(QVector<T> &other)

Меняет местами векторы other и этот вектор. Эта операция очень быстрая и никогда не завершается с ошибкой.

Эта функция была введена в Qt 4.8.

void QVector::swapItemsAt(int i, int j)

Меняет местами элемент с индексом i с элементом с индексом j. Эта функция предполагает, что и i, и j не меньше 0, но меньше size(). Чтобы избежать ошибки, проверьте, что и i, и j не меньше 0 и меньше size().

Эта функция была введена в Qt 5.14.

T QVector::takeAt(int i)

Удаляет элемент с индексом i и возвращает его.

Эквивалентно

T t = at(i);
remove(i);
return t;

Предоставляется для совместимости с QList.

Эта функция была введена в Qt 5.2.

См. также takeFirst(), takeLast() и QList::takeAt().

T QVector::takeFirst()

Удаляет первый элемент в векторе и возвращает его. Эта функция предполагает, что вектор не пуст. Чтобы избежать ошибок, вызовите isEmpty() перед вызовом этой функции.

Эта функция была введена в Qt 5.1.

См. также takeLast() и removeFirst().

T QVector::takeLast()

Удаляет последний элемент в списке и возвращает его. Эта функция предполагает, что вектор не пуст. Чтобы избежать ошибок, вызовите isEmpty() перед вызовом этой функции.

Если вам не нужно значение возврата, removeLast() более эффективно.

Эта функция была введена в Qt 5.1.

См. также takeFirst() и removeLast().

QList<T> QVector::toList() const

Возвращает объект QList с данными, содержащимися в этом QVector.

Пример:

QVector<double> vect;
vect << "red" << "green" << "blue" << "black";

QList<double> list = vect.toList();
// list: ["red", "green", "blue", "black"]

Примечание: С Qt 5.14 доступны конструкторы диапазонов для общих классов контейнеров Qt, и их следует использовать вместо этого метода.

См. также fromList() и QList::fromVector().

std::vector<T> QVector::toStdVector() const

Возвращает объект std::vector с данными, содержащимися в этом QVector. Пример:

QVector<double> vector;
vector << 1.2 << 0.5 << 3.14;

std::vector<double> stdvector = vector.toStdVector();

Примечание: С Qt 5.14 доступны конструкторы диапазонов для общих классов контейнеров Qt, и их следует использовать вместо этого метода.

См. также fromStdVector() и QList::toStdList().

T QVector::value(int i) const

Возвращает значение с индексом i в векторе.

Если индекс i выходит за пределы диапазона, функция возвращает значение по умолчанию. Если вы уверены, что i находится в пределах границ, вы можете использовать at() вместо этого, что немного быстрее.

См. также at() и operator[]().

T QVector::value(int i, const T &defaultValue) const

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

Если индекс i выходит за пределы диапазона, функция возвращает defaultValue.

bool QVector::operator!=(const QVector<T> &other) const

Возвращает true если other не равно этому вектору; в противном случае возвращает false.

Два вектора считаются равными, если они содержат одинаковые значения в том же порядке.

Эта функция требует, чтобы тип значения имел реализацию operator==().

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

QVector<T> QVector::operator+(const QVector<T> &other) const

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

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

QVector<T> &QVector::operator+=(const QVector<T> &other)

Добавляет элементы вектора other в этот вектор и возвращает ссылку на этот вектор.

См. также operator+() и append().

QVector<T> &QVector::operator+=(const T &value)

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

Добавляет value в вектор.

См. также append() и operator<<().

QVector<T> &QVector::operator+=(T &&value)

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

Эта функция была введена в Qt 5.11.

См. также append() и operator<<().

QVector<T> &QVector::operator<<(const T &value)

Добавляет value в вектор и возвращает ссылку на этот вектор.

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

QVector<T> &QVector::operator<<(const QVector<T> &other)

Добавляет other в вектор и возвращает ссылку на вектор.

QVector<T> &QVector::operator<<(T &&value)

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

Эта функция была введена в Qt 5.11.

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

QVector<T> &QVector::operator=(std::initializer_list<T> args)

Присваивает коллекцию значений в args этому экземпляру QVector.

Этот оператор активен только если компилятор поддерживает списки инициализации C++11.

Эта функция была добавлена в Qt 5.14.

bool QVector::operator==(const QVector<T> &other) const

Возвращает true если other равен этому вектору; иначе возвращает false.

Два вектора считаются равными, если они содержат одинаковые значения в том же порядке.

Эта функция требует, чтобы тип значения имел реализацию operator==().

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

T &QVector::operator[](int i)

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

i должен быть допустимым индексом в векторе (т.е., 0 <= i < size()).

Обратите внимание, что использование не-константных операторов может привести к тому, что QVector сделает глубокую копию.

См. также at() и value().

const T &QVector::operator[](int i) const

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

То же самое, что и at(i).

Связанные нечленённые функции

template <typename T> uint qHash(const QVector<T> &key, uint seed = 0)

Возвращает хэш-значение для key, используя seed для инициализации вычисления.

Эта функция требует, чтобы функция qHash() была перегружена для типа значения T.

Эта функция была добавлена в Qt 5.6.

template <typename T> bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)

Возвращает true если вектор lhs меньше, чем rhs в лексикографическом порядке; иначе возвращает false.

Эта функция требует, чтобы тип значения имел реализацию operator<().

Эта функция была добавлена в Qt 5.6.

template <typename T> QDataStream &operator<<(QDataStream &out, const QVector<T> &vector)

Записывает вектор vector в поток out.

Эта функция требует, чтобы тип значения реализовывал operator<<().

См. также Формат операторов QDataStream.

template <typename T> bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)

Возвращает true если вектор lhs меньше или равен rhs в лексикографическом порядке; иначе возвращает false.

Эта функция требует, чтобы тип значения имел реализацию operator<().

Эта функция была добавлена в Qt 5.6.

template <typename T> bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)

Возвращает true если вектор lhs больше, чем rhs в лексикографическом порядке; иначе возвращает false.

Эта функция требует, чтобы тип значения имел реализацию operator<().

Эта функция была добавлена в Qt 5.6.

template <typename T> bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)

Возвращает true если вектор lhs больше или равен rhs в лексикографическом порядке; иначе возвращает false.

Эта функция требует, чтобы тип значения имел реализацию operator<().

Эта функция была добавлена в Qt 5.6.

template <typename T> QDataStream &operator>>(QDataStream &in, QVector<T> &vector)

Читает вектор из потока in в vector.

Эта функция требует, чтобы тип значения реализовывал operator>>().

См. также Формат операторов QDataStream.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qvector.html

Spec-Zone.ru

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