Spec-Zone.ru › Qt 5.6

Класс QVarLengthArray

Класс QVarLengthArray предоставляет массив переменной длины низкого уровня. Подробнее...

Заголовок: #include <QVarLengthArray>
qmake: QT += core
  • Список всех членов, включая унаследованные

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

Публичные типы

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

Публичные функции

QVarLengthArray(int size = 0)
QVarLengthArray(const QVarLengthArray<T, Prealloc> &other)
QVarLengthArray(std::initializer_list<T> args)
~QVarLengthArray()
void append(const T &t)
void append(const T *buf, int size)
const T & at(int i) const
T & back()
const T & 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
bool contains(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
iterator erase(const_iterator pos)
iterator erase(const_iterator begin, const_iterator end)
T & first()
const T & first() const
T & front()
const T & 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(const_iterator before, int count, const T &value)
iterator insert(const_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
void pop_back()
void prepend(const T &value)
void push_back(const T &t)
reverse_iterator rbegin()
const_reverse_iterator rbegin() const
void remove(int i)
void remove(int i, int count)
void removeLast()
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()
T value(int i) const
T value(int i, const T &defaultValue) const
QVarLengthArray<T, Prealloc> & operator+=(const T &value)
QVarLengthArray<T, Prealloc> & operator<<(const T &value)
QVarLengthArray<T, Prealloc> & operator=(const QVarLengthArray<T, Prealloc> &other)
QVarLengthArray<T, Prealloc> & operator=(std::initializer_list<T> list)
T & operator[](int i)
const T & operator[](int i) const

Связанные нечлены

bool operator!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
bool operator<(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
bool operator<=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
bool operator==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
bool operator>(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)
bool operator>=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

Подробное описание

Класс QVarLengthArray предоставляет массив переменной длины низкого уровня.

Язык C++ не поддерживает массивы переменной длины в стеке. Например, следующий код не будет скомпилирован:

int myfunc(int n)
{
    int table[n + 1];  // WRONG
    ...
    return table[n];
}

Альтернативой является выделение массива в куче (с new):

int myfunc(int n)
{
    int *table = new int[n + 1];
    ...
    int ret = table[n];
    delete[] table;
    return ret;
}

Однако, если myfunc() вызывается очень часто из внутреннего цикла приложения, выделение памяти в куче может стать значительной причиной замедления.

QVarLengthArray — попытка обойти этот пробел в языке C++. Он выделяет определенное количество элементов в стеке, и если вы изменяете размер массива на больший размер, он автоматически использует кучу вместо этого. Выделение памяти в стеке имеет преимущество, что оно намного быстрее, чем выделение в куче.

Пример:

int myfunc(int n)
{
    QVarLengthArray<int, 1024> array(n + 1);
    ...
    return array[n];
}

В приведённом примере QVarLengthArray предварительно выделит 1024 элемента в стеке и будет использовать их, пока n + 1 не превысит 1024. Если вы опустите второй шаблонный аргумент, по умолчанию будет использоваться 256 элементов.

Тип значения QVarLengthArray должен быть присваиваемым типом данных. Это охватывает большинство типов данных, которые обычно используются, но компилятор не позволит вам, например, хранить QWidget как значение; вместо этого храните QWidget *.

QVarLengthArray, как и QVector, предоставляет структуру данных с изменяемым размером массива. Основные различия между этими двумя классами:

  • API QVarLengthArray намного более низкого уровня и ему не хватает некоторых функций QVector.
  • QVarLengthArray не инициализирует память, если значение является базовым типом. (QVector всегда делает это.)
  • QVector использует явное совместное использование в качестве оптимизации памяти. QVarLengthArray не предоставляет эту функцию; однако, он обычно обеспечивает немного лучшую производительность за счёт меньшей нагрузки, особенно в циклах с малым количеством операций.

В заключение, QVarLengthArray — это класс низкоуровневой оптимизации, который имеет смысл только в очень специфических случаях. Он используется в нескольких местах внутри Qt и был добавлен в публичный API Qt для удобства продвинутых пользователей.

См. также QVector, QList и QLinkedList.

Документация по типам членов

typedef QVarLengthArray::const_iterator

Тип для const T *. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::const_pointer

Тип для const T *. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::const_reference

Тип для const T &. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::const_reverse_iterator

Тип для std::reverse_iterator<const T*>. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 5.6.

typedef QVarLengthArray::difference_type

Тип для ptrdiff_t. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::iterator

Тип для T *. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::pointer

Тип для T *. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::reference

Тип для T &. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::reverse_iterator

Тип для std::reverse_iterator<T*>. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 5.6.

typedef QVarLengthArray::size_type

Тип для int. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

typedef QVarLengthArray::value_type

Тип для T. Предоставлен для совместимости со STL.

Этот typedef был введён в Qt 4.7.

Документация по функциям-членам

QVarLengthArray::QVarLengthArray(int size = 0)

Создаёт массив с начальным размером size элементов.

Если тип значения — примитивный тип (например, char, int, float) или указатель (например, QWidget *), элементы не инициализируются. Для других типов элементы инициализируются значением по умолчанию.

QVarLengthArray::QVarLengthArray(const QVarLengthArray<T, Prealloc> &other)

Создаёт копию other.

QVarLengthArray::QVarLengthArray(std::initializer_list<T> args)

Создаёт массив из std::initializer_list, заданной args.

Этот конструктор активируется только если компилятор поддерживает списки инициализации C++11.

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

QVarLengthArray::~QVarLengthArray()

Уничтожает массив.

void QVarLengthArray::append(const T &t)

Добавляет элемент t в массив, расширяя массив при необходимости.

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

void QVarLengthArray::append(const T *buf, int size)

Добавляет size элементов, ссылающихся на buf, в этот массив.

const T &QVarLengthArray::at(int i) const

Возвращает ссылку на элемент с индексом i.

i должен быть допустимым индексом в массиве (т.е., 0 <= i < size()).

См. также value() и operator[]().

T &QVarLengthArray::back()

То же, что и last(). Предоставлено для совместимости со STL.

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

const T &QVarLengthArray::back() const

Это перегруженная функция.

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

iterator QVarLengthArray::begin()

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

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

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

const_iterator QVarLengthArray::begin() const

Это перегруженная функция.

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

int QVarLengthArray::capacity() const

Возвращает максимальное количество элементов, которое может храниться в массиве без принудительной переаллокации.

Единственная цель этой функции — предоставить способ точной настройки использования памяти QVarLengthArray. Как правило, вам редко придётся вызывать эту функцию. Если вы хотите узнать, сколько элементов находится в массиве, вызовите size().

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

const_iterator QVarLengthArray::cbegin() const

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

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

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

const_iterator QVarLengthArray::cend() const

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

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

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

void QVarLengthArray::clear()

Удаляет все элементы из массива.

То же самое, что и resize(0).

const_iterator QVarLengthArray::constBegin() const

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

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

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

const T *QVarLengthArray::constData() const

Возвращает const указатель на данные, хранящиеся в массиве. Указатель может использоваться для доступа к элементам в массиве. Указатель остается действительным до тех пор, пока массив не перераспределяется.

Эта функция в основном полезна для передачи массива функции, которая принимает обычный массив C++.

См. также data() и operator[]().

const_iterator QVarLengthArray::constEnd() const

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

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

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

bool QVarLengthArray::contains(const T &value) const

Возвращает true если массив содержит вхождение value; в противном случае возвращает false.

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

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

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

int QVarLengthArray::count() const

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

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

const_reverse_iterator QVarLengthArray::crbegin() const

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

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

См. также begin(), rbegin(), и rend().

const_reverse_iterator QVarLengthArray::crend() const

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

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

См. также end(), rend(), и rbegin().

T *QVarLengthArray::data()

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

Пример:

QVarLengthArray<int> array(10);
int *data = array.data();
for (int i = 0; i < 10; ++i)
    data[i] = 2 * i;

Указатель остается действительным, пока массив не перераспределяется.

Эта функция в основном полезна для передачи массива функции, которая принимает обычный массив C++.

См. также constData() и operator[]().

const T *QVarLengthArray::data() const

Это перегруженная функция.

bool QVarLengthArray::empty() const

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

То же самое, что и isEmpty(). Представлено для совместимости со STL.

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

iterator QVarLengthArray::end()

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

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

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

const_iterator QVarLengthArray::end() const

Это перегруженная функция.

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

iterator QVarLengthArray::erase(const_iterator pos)

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

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

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

iterator QVarLengthArray::erase(const_iterator begin, const_iterator end)

Это перегруженная функция.

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

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

T &QVarLengthArray::first()

Возвращает ссылку на первый элемент в массиве. Массив не должен быть пустым. Если массив может быть пустым, проверьте isEmpty() перед вызовом этой функции.

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

const T &QVarLengthArray::first() const

Это перегруженная функция.

T &QVarLengthArray::front()

То же самое, что и first(). Представлено для совместимости со STL.

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

const T &QVarLengthArray::front() const

Это перегруженная функция.

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

int QVarLengthArray::indexOf(const T &value, int from = 0) const

Возвращает индекс первого вхождения value в массиве, выполняя поиск вперед с индекса from. Возвращает -1, если ни один элемент не совпал.

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

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

См. также lastIndexOf() и contains().

void QVarLengthArray::insert(int i, const T &value)

Вставляет value в позицию с индексом i в массиве. Если i равно 0, значение добавляется в начало массива. Если i равно size(), значение добавляется в конец массива.

Для больших массивов эта операция может быть медленной (линейное время), так как требует перемещения всех элементов с индексами i и выше на одну позицию дальше в памяти. Если вы хотите класс контейнера, который обеспечивает быструю функцию insert(), используйте QLinkedList вместо этого.

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

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

void QVarLengthArray::insert(int i, int count, const T &value)

Это перегруженная функция.

Вставляет count копий value в позицию с индексом i в массиве.

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

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

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

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

iterator QVarLengthArray::insert(const_iterator before, const T &value)

Это перегруженная функция.

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

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

bool QVarLengthArray::isEmpty() const

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

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

T &QVarLengthArray::last()

Возвращает ссылку на последний элемент в массиве. Массив не должен быть пустым. Если массив может быть пустым, проверьте isEmpty() перед вызовом этой функции.

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

const T &QVarLengthArray::last() const

Это перегруженная функция.

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

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

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

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

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

int QVarLengthArray::length() const

То же, что и size().

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

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

void QVarLengthArray::pop_back()

То же, что и removeLast(). Предоставлено для совместимости со STL.

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

void QVarLengthArray::prepend(const T &value)

Вставляет value в начало массива.

Это то же самое, что vector.insert(0, value).

Для больших массивов эта операция может быть медленной (линейное время), так как требует перемещения всех элементов в векторе на одну позицию дальше в памяти. Если вам нужен класс контейнера, который предоставляет быструю функцию prepend(), используйте QList или QLinkedList вместо этого.

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

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

void QVarLengthArray::push_back(const T &t)

Добавляет элемент t в массив, расширяя массив при необходимости. Предоставлено для совместимости со STL.

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

reverse_iterator QVarLengthArray::rbegin()

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

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

См. также begin(), crbegin() и rend().

const_reverse_iterator QVarLengthArray::rbegin() const

Это перегруженная функция.

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

void QVarLengthArray::remove(int i)

Это перегруженная функция.

Удаляет элемент с индексом i.

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

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

void QVarLengthArray::remove(int i, int count)

Это перегруженная функция.

Удаляет count элементов из середины массива, начиная с индекса i.

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

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

void QVarLengthArray::removeLast()

Уменьшает размер массива на единицу. Размер выделенной памяти не изменяется.

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

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

reverse_iterator QVarLengthArray::rend()

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

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

См. также end(), crend() и rbegin().

const_reverse_iterator QVarLengthArray::rend() const

Это перегруженная функция.

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

void QVarLengthArray::replace(int i, const T &value)

Заменяет элемент с индексом i значением value.

i должен быть допустимым индексом в массиве (т.е., 0 <= i < size()).

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

См. также operator[]() и remove().

void QVarLengthArray::reserve(int size)

Пытается выделить память для как минимум size элементов. Если вы заранее знаете, насколько большим может стать массив, вы можете вызвать эту функцию, и если вы часто вызываете resize(), вы, вероятно, получите лучшую производительность. Если size является заниженной оценкой, худшее, что может произойти, это то, что QVarLengthArray будет немного медленнее.

Единственная цель этой функции — предоставить возможность точной настройки использования памяти QVarLengthArray. В общем случае вам редко понадобится вызывать эту функцию. Если вы хотите изменить размер массива, вызовите resize().

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

void QVarLengthArray::resize(int size)

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

Если тип значения является примитивным типом (например, char, int, float) или типом указателя (например, QWidget *), новые элементы не инициализируются. Для других типов элементы инициализируются значением по умолчанию.

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

int QVarLengthArray::size() const

Возвращает количество элементов в массиве.

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

void QVarLengthArray::squeeze()

Освобождает память, не требуемую для хранения элементов. Если контейнер может поместить свои данные в стековую память, он освободит память кучи и скопирует элементы обратно в стек.

Единственная цель этой функции — предоставить способ точной настройки использования памяти QVarLengthArray. В общем случае вам редко понадобится вызывать эту функцию.

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

См. также reserve(), capacity() и resize().

T QVarLengthArray::value(int i) const

Возвращает значение с индексом i.

Если индекс i выходит за пределы массива, функция возвращает значение по умолчанию. Если вы уверены, что i находится в допустимых пределах, вы можете использовать at() вместо этого, что немного быстрее.

См. также at() и operator[]().

T QVarLengthArray::value(int i, const T &defaultValue) const

Это перегруженная функция.

Если индекс i выходит за пределы массива, функция возвращает defaultValue.

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator+=(const T &value)

Добавляет value в массив и возвращает ссылку на этот вектор.

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

См. также append() и operator<<().

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator<<(const T &value)

Добавляет value в массив и возвращает ссылку на этот вектор.

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

См. также append() и operator+=().

END_OF_DOCUMENT_MARKER

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(const QVarLengthArray<T, Prealloc> &other)

Присваивает other этому массиву и возвращает ссылку на этот массив.

QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(std::initializer_list<T> list)

Присваивает значения из list этому массиву и возвращает ссылку на этот массив.

Этот конструктор активирован только если компилятор поддерживает C++11 списки инициализации.

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

T &QVarLengthArray::operator[](int i)

Возвращает ссылку на элемент с индексом i.

i должен быть корректным индексом массива (т.е., 0 <= i < size()).

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

const T &QVarLengthArray::operator[](int i) const

Это перегруженная функция.

Связанные нечлен-функции

bool operator!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)

Возвращает true если два массива, заданные left и right, не равны.

Два массива считаются равными, если они содержат одинаковые значения в одинаковом порядке.

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

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

См. также operator==().

bool operator<(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

Возвращает true если массив lhs меньше, чем rhs в лексикографическом порядке; в противном случае возвращает false.

Эта функция требует реализации типа значения operator<().

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

bool operator<=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

Возвращает true если массив lhs меньше или равен rhs в лексикографическом порядке; в противном случае возвращает false.

Эта функция требует реализации типа значения operator<().

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

bool operator==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)

Возвращает true если два массива, заданные left и right, равны.

Два массива считаются равными, если они содержат одинаковые значения в одинаковом порядке.

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

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

См. также operator!=().

bool operator>(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

Возвращает true если массив lhs больше, чем rhs в лексикографическом порядке; в противном случае возвращает false.

Эта функция требует реализации типа значения operator<().

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

bool operator>=(const QVarLengthArray<T, Prealloc1> &lhs, const QVarLengthArray<T, Prealloc2> &rhs)

Возвращает true если массив lhs больше или равен rhs в лексикографическом порядке; в противном случае возвращает false.

Эта функция требует реализации типа значения operator<().

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

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qvarlengtharray.html

Spec-Zone.ru

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