Класс 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 = ...) |
| T & | first() |
| const T & | first() const |
| T & | front() |
| QVector::const_reference | front() const |
| int | indexOf(const T &value, int from = ...) 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 = ...) const |
| int | length() const |
| QVector<T> | mid(int pos, int length = ...) 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 = ...) |
| 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 (*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 , если приложение компилируется с поддержкой исключений. Если исключения отключены, тогда исчерпание памяти — неопределённое поведение.
Обратите внимание, что операционная система может накладывать дополнительные ограничения на приложения, хранящие много выделенной памяти, особенно большие смежные блоки. Такие соображения, конфигурация такого поведения или любые методы смягчения находятся вне сферы Qt API.
См. также QVectorIterator, QMutableVectorIterator, QList и QLinkedList.
Документация по типам членов
typedef QVector::ConstIterator
Синоним в стиле Qt для QVector::const_iterator.
typedef QVector::Iterator
Синоним в стиле Qt для QVector::iterator.
typedef QVector::const_iterator
QVector::const_iterator предоставляет итератор типа const в стиле 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 предоставляет обратный итератор типа const в стиле 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 без const для QVector и QStack.
QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Итератор в стиле STL без const — это просто псевдоним для "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 без const для QVector.
Это просто псевдоним для std::reverse_iterator<T*>.
Предупреждение: Итераторы для контейнеров с неявным совместным использованием не работают точно так же, как итераторы STL. Следует избегать копирования контейнера, пока активны итераторы этого контейнера. Для получения дополнительной информации ознакомьтесь с проблемой итераторов при неявном совместном использовании.
Этот typedef был введён в 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 вместо QVector.
См. также 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 вместо QVector.
См. также append() и insert().
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.
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.
QVector::const_iterator QVector::cend() const
Возвращает константный итератор STL, указывающий на воображаемый элемент после последнего элемента в векторе.
Эта функция была добавлена в Qt 5.0.
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.
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 = ...)
Присваивает 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 = ...) 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.
T &QVector::last()
Возвращает ссылку на последний элемент в векторе. Данный метод предполагает, что вектор не пуст.
См. также first(), isEmpty() и constLast().
const T &QVector::last() const
Это перегруженный метод.
int QVector::lastIndexOf(const T &value, int from = ...) 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 = ...) 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()).
Обратите внимание, что использование операторов без const может привести к тому, что QVector сделает глубокую копию.
const T &QVector::operator[](int i) const
Это перегруженная функция.
То же, что и at(i).
Связанные внешние функции
uint qHash(const QVector<T> &key, uint seed = ...)
Возвращает значение хеша для key, используя seed для инициализации вычисления.
Для этой функции необходимо переопределить qHash() для типа значения T.
Эта функция была добавлена в Qt 5.6.
bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true если вектор lhs меньше, чем rhs в лексикографическом порядке; в противном случае возвращает false.
Для этой функции тип значения должен иметь реализацию operator<().
Эта функция была добавлена в Qt 5.6.
QDataStream &operator<<(QDataStream &out, const QVector<T> &vector)
Записывает вектор vector в поток out.
Для этой функции тип значения должен реализовывать operator<<().
См. также Формат операторов QDataStream.
bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true если вектор lhs меньше или равен rhs в лексикографическом порядке; в противном случае возвращает false.
Для этой функции тип значения должен иметь реализацию operator<().
Эта функция была добавлена в Qt 5.6.
bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true если вектор lhs больше, чем rhs в лексикографическом порядке; в противном случае возвращает false.
Для этой функции тип значения должен иметь реализацию operator<().
Эта функция была добавлена в Qt 5.6.
bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true если вектор lhs больше или равен rhs в лексикографическом порядке; в противном случае возвращает false.
Для этой функции тип значения должен иметь реализацию operator<().
Эта функция была добавлена в Qt 5.6.
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.14/qvector.html