Spec-Zone.ru › Qt 5.6

Класс QVector

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

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

QPolygon, QPolygonF, QStack и QXmlStreamAttributes

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

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

Типы

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

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

QVector()
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.

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

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.

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

const_iterator QVector::cend() const

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

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

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

void QVector::clear()

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

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.

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

iterator QVector::erase(iterator pos)

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

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

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

Это перегруженный метод.

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

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

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

Пример:

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

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

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

T &QVector::first()

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

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

const T &QVector::first() const

Это перегруженный метод.

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

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

Пример:

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

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

См. также 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]

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

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

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

Это перегруженный метод.

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

bool QVector::isEmpty() const

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

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

T &QVector::last()

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

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

const T &QVector::last() const

Это перегруженный метод.

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

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

Пример:

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

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

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

int QVector::length() const

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

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

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

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

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

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

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

Перемещает элемент с индексом from в индекс to.

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

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

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

void QVector::pop_back()

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

void QVector::pop_front()

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

void QVector::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() или reserve() зависит от типа элемента, поскольку resize() создаёт все элементы по умолчанию и требует присваивания существующим записям, а не вызова append(), который копирует или перемещает значения. Для простых типов, таких как int или double, resize() обычно быстрее, но для чего-либо более сложного вы должны предпочесть reserve().

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

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

void QVector::resize(int size)

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

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

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

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 сделает глубокую копию.

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

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/archives/qt-5.6/qvector.html

Spec-Zone.ru

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