Класс QVector
Класс QVector — это шаблонный класс, предоставляющий динамический массив. Подробнее...
| Заголовок: | #include <QVector> |
| qmake: | QT += core |
| Наследуется от: |
Примечание: Все функции в этом классе являются повторно входящими.
Типы публичного доступа
| 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() | |
| QVector(int size) | |
| QVector(int size, const T &value) | |
| QVector(const QVector<T> &other) | |
| QVector(QVector<T> &&other) | |
| QVector(std::initializer_list<T> args) | |
| ~QVector() | |
| void | append(const T &value) |
| void | append(T &&value) |
| void | append(const QVector<T> &value) |
| const T & | at(int i) const |
| reference | back() |
| const_reference | back() const |
| iterator | begin() |
| const_iterator | begin() const |
| int | capacity() const |
| const_iterator | cbegin() const |
| const_iterator | cend() const |
| void | clear() |
| const_iterator | constBegin() const |
| const T * | constData() const |
| 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 |
| const_reverse_iterator | crbegin() const |
| const_reverse_iterator | crend() const |
| T * | data() |
| const T * | data() const |
| bool | empty() const |
| iterator | end() |
| const_iterator | end() const |
| bool | endsWith(const T &value) const |
| iterator | erase(iterator pos) |
| iterator | erase(iterator begin, iterator end) |
| QVector<T> & | fill(const T &value, int size = -1) |
| T & | first() |
| const T & | first() const |
| T & | front() |
| const_reference | front() const |
| int | indexOf(const T &value, int from = 0) const |
| void | insert(int i, const T &value) |
| void | insert(int i, int count, const T &value) |
| iterator | insert(iterator before, int count, const T &value) |
| iterator | insert(iterator before, const 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(const T &value) |
| void | push_back(const T &value) |
| void | push_back(T &&value) |
| void | push_front(const T &value) |
| reverse_iterator | rbegin() |
| 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) |
| reverse_iterator | rend() |
| const_reverse_iterator | rend() const |
| void | replace(int i, const T &value) |
| void | reserve(int size) |
| void | resize(int size) |
| int | size() const |
| void | squeeze() |
| bool | startsWith(const T &value) const |
| void | swap(QVector<T> &other) |
| 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<<(const T &value) |
| QVector<T> & | operator<<(const QVector<T> &other) |
| QVector<T> & | operator=(const QVector<T> &other) |
| QVector<T> & | operator=(QVector<T> &&other) |
| 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 — это шаблонный класс, предоставляющий динамический массив.
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 — нет. Это может быть важно, если ваше приложение должно взаимодействовать с C API.
Примечание: Итераторы в QLinkedList и ссылки на элементы в QList, выделенных в куче, остаются действительными до тех пор, пока соответствующие элементы остаются в контейнере. Это не относится к итераторам и ссылкам в QVector и QList, не выделенным в куче.
Вот пример QVector, хранящего целые числа, и QVector, хранящего значения QString:
QVector<int> integerVector; QVector<QString> stringVector;
QVector хранит свои элементы в векторе (массиве). Обычно векторы создаются с начальным размером. Например, следующий код создаёт QVector с 200 элементами:
QVector<QString> vector(200);
Элементы автоматически инициализируются с помощью значения по умолчанию. Если вы хотите инициализировать вектор другим значением, передайте это значение в качестве второго аргумента конструктору:
QVector<QString> vector(200, "Pass");
Вы также можете вызвать fill() в любое время, чтобы заполнить вектор значением.
QVector использует индексы с нулевым основанием, как и C++ массивы. Для доступа к элементу по определённому индексу можно использовать operator[](). Для неконстантных векторов operator[]() возвращает ссылку на элемент, который можно использовать в левой части присваивания:
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 << endl;
} at() может быть быстрее, чем operator[](), потому что он никогда не вызывает глубокую копию.
Ещё один способ доступа к данным в QVector — это вызов data(). Функция возвращает указатель на первый элемент в векторе. Вы можете использовать указатель для прямого доступа и изменения элементов, хранящихся в векторе. Указатель также полезен, если вам нужно передать QVector в функцию, принимающую обычный C++ массив.
Если вам нужно найти все вхождения определенного значения в вектор, используйте indexOf() или lastIndexOf(). Первый ищет вперёд, начиная с заданной позиции индекса, второй — назад. Оба возвращают индекс соответствующего элемента, если он найден; в противном случае возвращают -1. Например:
int i = vector.indexOf("Harumi");
if (i != -1)
cout << "First occurrence of Harumi is at position " << i << endl; Если вам просто нужно проверить, содержит ли вектор определённое значение, используйте contains(). Если вы хотите узнать, сколько раз определённое значение встречается в векторе, используйте count().
QVector предоставляет эти базовые функции для добавления, перемещения и удаления элементов: insert(), replace(), remove(), prepend(), append(). За исключением append() и replace(), эти функции могут быть медленными (линейное время) для больших векторов, поскольку они требуют перемещения многих элементов в векторе на одну позицию в памяти. Если вам нужен класс контейнера, который обеспечивает быструю вставку/удаление в середине, используйте QList или QLinkedList вместо этого.
В отличие от обычных массивов C++, размер QVectors можно изменять в любое время, вызывая resize(). Если новый размер больше старого, QVector может потребовать перераспределить весь вектор. QVector пытается уменьшить количество перераспределений, предварительно выделяя до удвоенного объёма памяти, необходимого для фактических данных.
Если заранее известно приблизительно, сколько элементов будет содержать QVector, можно вызвать reserve(), попросив QVector предварительно выделить определённое количество памяти. Также можно вызвать capacity(), чтобы узнать, сколько памяти фактически выделил QVector.
Обратите внимание, что использование не-const операторов и функций может привести к тому, что QVector сделает глубокую копию данных. Это связано с явным совместным использованием.
QVector's тип значения должен быть тип данных, присваиваемым. Это охватывает большинство типов данных, которые обычно используются, но компилятор не позволит вам, например, хранить 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.
См. также 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 для QVector и QStack.
QVector предоставляет итераторы как в стиле STL, так и в стиле Java. Итератор в стиле 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.
Документация функций-членов
QVector::QVector()
Конструирует пустой вектор.
См. также resize().
QVector::QVector(int size)
Конструирует вектор с начальным размером size элементов.
Элементы инициализируются значением по умолчанию.
См. также resize().
QVector::QVector(int size, const T &value)
Конструирует вектор с начальным размером size элементов. Каждый элемент инициализируется значением value.
QVector::QVector(const QVector<T> &other)
Конструирует копию other.
Эта операция занимает постоянное время, потому что QVector — явное совместное использование. Это делает возврат QVector из функции очень быстрым. Если изменён общий экземпляр, он будет скопирован (copy-on-write), и это занимает линейное время.
См. также operator=().
QVector::QVector(QVector<T> &&other)
Перемещающее создание экземпляра QVector, делая его указывающим на тот же объект, на который указывал other.
Эта функция была представлена в Qt 5.2.
QVector::QVector(std::initializer_list<T> args)
Создаёт вектор из std::initializer_list, заданной параметром args.
Этот конструктор доступен только если компилятор поддерживает C++11 списки инициализации.
Эта функция была добавлена в Qt 4.8.
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[]().
reference QVector::back()
Эта функция предоставлена для совместимости со STL. Она эквивалентна last().
const_reference QVector::back() const
Это перегруженная функция.
iterator QVector::begin()
Возвращает итератор STL, указывающий на первый элемент вектора.
См. также constBegin() и end().
const_iterator QVector::begin() const
Это перегруженная функция.
int QVector::capacity() const
Возвращает максимальное количество элементов, которое может храниться в векторе без принудительного перевыделения памяти.
Единственная цель этой функции — предоставить средство для тонкой настройки использования памяти QVector. Как правило, вам редко понадобится вызывать эту функцию. Если вы хотите узнать, сколько элементов находится в векторе, вызовите size().
См. также reserve() и squeeze().
const_iterator QVector::cbegin() const
Возвращает постоянный итератор STL, указывающий на первый элемент в векторе.
Эта функция была добавлена в Qt 5.0.
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().
const_iterator QVector::constBegin() const
Возвращает постоянный итератор STL, указывающий на первый элемент в векторе.
См. также begin() и constEnd().
const T *QVector::constData() const
Возвращает постоянную ссылку на данные, хранящиеся в векторе. Указатель может использоваться для доступа к элементам в векторе. Указатель остаётся действительным, пока вектор не перевыделяется.
Эта функция полезна в основном для передачи вектора функции, которая принимает обычный массив C++.
См. также data() и operator[]().
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().
const_reverse_iterator QVector::crbegin() const
Возвращает постоянный обратный итератор STL, указывающий на первый элемент в векторе в обратном порядке.
Эта функция была добавлена в Qt 5.6.
См. также begin(), rbegin() и rend().
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.
iterator QVector::end()
Возвращает итератор STL, указывающий на воображаемый элемент после последнего элемента в векторе.
См. также begin() и constEnd().
const_iterator QVector::end() const
Это перегруженная функция.
bool QVector::endsWith(const T &value) const
Возвращает true если этот вектор не пуст и его последний элемент равен value; в противном случае возвращает false.
Эта функция была добавлена в Qt 4.5.
итератор QVector::erase(итератор pos)
Удаляет элемент, на который указывает итератор pos, из вектора и возвращает итератор на следующий элемент в векторе (который может быть end()).
См. также insert() и remove().
итератор QVector::erase(итератор begin, итератор 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"]
См. также 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);
См. также toStdVector() и QList::fromStdList().
T &QVector::front()
Эта функция предоставлена для совместимости со STL. Она эквивалентна first().
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, 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::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::insert(итератор before, int count, const T &value)
Вставляет count копий value перед элементом, на который указывает итератор before. Возвращает итератор, указывающий на первый из вставленных элементов.
итератор QVector::insert(итератор before, const T &value)
Это перегруженный метод.
Вставляет 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 = -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::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().
void QVector::push_back(const T &value)
Эта функция предоставлена для совместимости со STL. Она эквивалентна append(value).
void QVector::push_back(T &&value)
Это перегруженный метод.
Эта функция была добавлена в Qt 5.6.
void QVector::push_front(const T &value)
Эта функция предоставлена для совместимости со STL. Она эквивалентна prepend(value).
reverse_iterator QVector::rbegin()
Возвращает обратный итератор STL, указывающий на первый элемент в векторе в обратном порядке.
Эта функция была добавлена в Qt 5.6.
См. также begin(), crbegin(), и rend().
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, из вектора. Возвращает значение, указывающее, был ли элемент удалён.
Предоставлено для совместимости с QList.
Эта функция была добавлена в Qt 5.4.
См. также removeAll() и QList::removeOne().
reverse_iterator QVector::rend()
Возвращает обратный итератор STL, указывающий на позицию после последнего элемента в векторе в обратном порядке.
Эта функция была добавлена в Qt 5.6.
См. также end(), crend(), и rbegin().
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() по умолчанию создаёт все элементы и требует присваивания существующим записям вместо вызова append(), который копирует или перемещает элементы. Для простых типов, таких как int или double, resize() обычно быстрее, но для более сложных типов следует использовать reserve().
Предупреждение: Если размер, передаваемый resize(), был занижен, может возникнуть недостаток выделенной памяти и неопределённое поведение. Эта проблема не возникает с reserve(), так как она рассматривает размер как подсказку.
См. также squeeze() и capacity().
void QVector::resize(int size)
Устанавливает размер вектора на size. Если size больше текущего размера, элементы добавляются в конец; новые элементы инициализируются значениями по умолчанию. Если size меньше текущего размера, элементы удаляются с конца.
Начиная с Qt 5.6, resize() больше не уменьшает ёмкость. Для освобождения избыточной ёмкости используйте squeeze().
См. также size().
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.
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"]
См. также 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();
См. также 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<<(const T &value)
Добавляет value в вектор и возвращает ссылку на этот вектор.
См. также append() и operator+=().
QVector<T> &QVector::operator<<(const QVector<T> &other)
Добавляет other в вектор и возвращает ссылку на вектор.
QVector<T> &QVector::operator=(const QVector<T> &other)
Присваивает other этому вектору и возвращает ссылку на этот вектор.
QVector<T> &QVector::operator=(QVector<T> &&other)
Перемещающее присваивание other этому экземпляру QVector.
Эта функция была представлена в Qt 5.2.
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 = 0)
Возвращает значение хэша для 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.9/qvector.html