Класс 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(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) |
| 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) |
| 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 и ссылки в массивах 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++. Для доступа к элементу по определенному индексу можно использовать оператор[](). Для векторов, не являющихся константными, оператор[]() возвращает ссылку на элемент, который можно использовать в левой части оператора присваивания:
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.
Обратите внимание, что использование неконстантных операторов и функций может привести к тому, что QVector сделает глубокую копию данных. Это связано с неявным совместным использованием.
Тип значения QVector должен быть типом данных, присваиваемым по значению. Это охватывает большинство типов данных, которые обычно используются, но компилятор не позволит вам, например, хранить QWidget как значение; вместо этого храните указатель QWidget *. Некоторые функции имеют дополнительные требования; например, indexOf() и lastIndexOf() ожидают, что тип значения поддерживает operator==(). Эти требования документированы для каждой функции отдельно.
Как и другие классы контейнеров, QVector предоставляет итераторы в стиле Java (QVectorIterator и QMutableVectorIterator) и итераторы в стиле STL (QVector::const_iterator и QVector::iterator). На практике ими редко пользуются, поскольку можно использовать индексы в QVector.
Помимо QVector, Qt также предоставляет QVarLengthArray, очень низкоуровневый класс с небольшим функционалом, оптимизированный для скорости.
QVector не поддерживает вставку, добавление в начало, добавление в конец или замену ссылок на собственные значения. Это приведет к аварийному завершению приложения с сообщением об ошибке.
Дополнительная информация об использовании контейнеров Qt
Подробное сравнение контейнеров Qt друг с другом и с контейнерами STL см. в Understand the Qt Containers.
Максимальный размер и условия недостатка памяти
Текущая версия QVector ограничена чуть менее чем 2 ГБ (2^31 байт) по размеру. Точное значение зависит от архитектуры, так как оно зависит от накладных расходов на управление блоком данных, но не превышает 32 байта. Количество элементов, которое может храниться в QVector, равно этому размеру, деленному на размер каждого элемента.
В случае неудачного выделения памяти QVector будет использовать макрос Q_CHECK_PTR, который выбросит исключение std::bad_alloc если приложение компилируется с поддержкой исключений. Если исключения отключены, то выход из памяти - неопределенное поведение.
Обратите внимание, что операционная система может накладывать дополнительные ограничения на приложения, содержащие много выделенной памяти, особенно большие, непрерывные блоки. Такие соображения, конфигурация такого поведения или любые меры по смягчению не входят в сферу API Qt.
См. также QVectorIterator, QMutableVectorIterator, QList и QLinkedList.
Документация по типам членов
typedef QVector::ConstIterator
Синоним в стиле Qt для QVector::const_iterator.
typedef QVector::Iterator
Синоним в стиле Qt для QVector::iterator.
typedef QVector::const_iterator
Тип QVector::const_iterator предоставляет итератор STL-стиля для QVector и QStack.
QVector предоставляет как итераторы в стиле STL, так и итераторы в стиле Java. Итератор const в стиле STL просто является псевдонимом для "const T *" (указатель на const T).
Предупреждение: Итераторы на контейнерах с неявным совместным использованием не работают точно так же, как итераторы STL. Следует избегать копирования контейнера во время активности итераторов на этом контейнере. Более подробную информацию см. в 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.
Этот 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(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 вместо него.
См. также 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 вместо него.
См. также append() и insert().
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, емкость сохраняется. Чтобы освободить всю емкость, выполните swap с вектором, созданным по умолчанию:
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
Возвращает константный итератор обратного порядка, указывающий на первый элемент в векторе в обратном порядке.
Эта функция была добавлена в Qt 5.6.
См. также begin(), rbegin() и rend().
QVector::const_reverse_iterator QVector::crend() const
Возвращает константный итератор обратного порядка, указывающий на элемент, следующий за последним элементом в векторе, в обратном порядке.
Эта функция была добавлена в 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, из вектора. Возвращает, был ли удален элемент.
Предоставляется для совместимости с 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+=().
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 QVector::qHash(const QVector<T> &key, uint seed = ...)
Возвращает значение хэша для key, используя seed для инициализации вычисления.
Для этой функции требуется перегрузка qHash() для типа значения T.
Эта функция была добавлена в Qt 5.6.
bool QVector::operator<(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true, если вектор lhs лексикографически меньше rhs; в противном случае возвращает false.
Для этой функции требуется, чтобы тип значения имел реализацию operator<().
Эта функция была добавлена в Qt 5.6.
QDataStream &QVector::operator<<(QDataStream &out, const QVector<T> &vector)
Записывает вектор vector в поток out.
Для этой функции требуется, чтобы тип значения реализовывал operator<<().
См. также Формат операторов QDataStream.
bool QVector::operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true, если вектор lhs лексикографически меньше или равен rhs; в противном случае возвращает false.
Для этой функции требуется, чтобы тип значения имел реализацию operator<().
Эта функция была добавлена в Qt 5.6.
bool QVector::operator>(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true, если вектор lhs лексикографически больше rhs; в противном случае возвращает false.
Для этой функции требуется, чтобы тип значения имел реализацию operator<().
Эта функция была добавлена в Qt 5.6.
bool QVector::operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
Возвращает true, если вектор lhs лексикографически больше или равен rhs; в противном случае возвращает false.
Для этой функции требуется, чтобы тип значения имел реализацию operator<().
Эта функция была добавлена в Qt 5.6.
QDataStream &QVector::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.13/qvector.html