Класс 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 |
| 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) |
| 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=(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 = ...) |
| 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 — нет. Это может быть важно, если ваше приложение должно взаимодействовать с API C.
Примечание: Итераторы в QLinkedList и ссылки на элементы в куче QLists остаются действительными, пока ссылаемые элементы остаются в контейнере. Это не относится к итераторам и ссылкам в QVector и не требующим выделения в куче QLists.
END_OF_DOCUMENT_MARKERВот пример QVector, хранящего целые числа, и QVector, хранящего значения QString:
QVector<int> integerVector; QVector<QString> stringVector;
QVector хранит свои элементы в векторе (массиве). Обычно векторы создаются с начальным размером. Например, следующий код создает QVector с 200 элементами:
QVector<QString> vector(200);
Элементы автоматически инициализируются значением по умолчанию. Если вы хотите инициализировать вектор другим значением, передайте это значение вторым аргументом конструктору:
QVector<QString> vector(200, "Pass");
Вы также можете в любое время вызвать fill() для заполнения вектора определенным значением.
QVector использует индексы с нуля, как и массивы C++. Для доступа к элементу по определенному индексу можно использовать оператор[](). Для не-const векторов оператор[]() возвращает ссылку на элемент, которая может использоваться в левой части присваивания:
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() может быть быстрее, чем оператор[](), поскольку он никогда не приводит к выполнению глубокой копии.
Другой способ доступа к данным, хранящимся в 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++, размер QVector может быть изменен в любое время путем вызова resize(). Если новый размер больше старого, QVector может потребоваться перевыделить весь вектор. QVector пытается уменьшить число перевыделений, предварительно выделяя до удвоенного объема памяти, необходимого для фактических данных.
Если вы заранее знаете приблизительное количество элементов, которое будет содержать QVector, вы можете вызвать reserve(), попросив QVector предварительно выделить определенное количество памяти. Вы также можете вызвать capacity(), чтобы узнать, сколько памяти фактически выделил QVector.
Обратите внимание, что использование не-const операторов и функций может привести к тому, что 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.
См. также 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-итераторы. Следует избегать копирования контейнера во время активности итераторов на этом контейнере. Дополнительную информацию см. в разделе Implicit sharing iterator problem.
См. также 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-итераторы. Следует избегать копирования контейнера во время активности итераторов на этом контейнере. Дополнительную информацию см. в разделе Implicit sharing iterator problem.
Этот тип был введен в 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-итераторы. Следует избегать копирования контейнера во время активности итераторов на этом контейнере. Дополнительную информацию см. в разделе Implicit sharing iterator problem.
См. также 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-итераторы. Следует избегать копирования контейнера во время активности итераторов на этом контейнере. Дополнительную информацию см. в разделе Implicit sharing iterator problem.
Этот тип был введен в 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(const T &value)
void QVector::push_front(T &&value)
Данная функция предоставляется для совместимости со STL. Она эквивалентна prepend(value).
QVector::iterator QVector::insert(QVector::iterator before, const T &value)
QVector::iterator QVector::insert(QVector::iterator before, T &&value)
Это перегруженная функция.
Вставляет value перед элементом, на который указывает итератор before. Возвращает итератор, указывающий на вставленный элемент.
void QVector::insert(int i, const T &value)
void QVector::insert(int i, 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(const T &value)
void QVector::prepend(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()
Конструирует пустой вектор.
См. также 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[]().
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"]
См. также 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().
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() по умолчанию создает все элементы и требует присваивания существующим элементам, а не вызова 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.
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+=(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=(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()).
Обратите внимание, что использование неконстантных операторов может привести к тому, что 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/archives/qt-5.11/qvector.html