Класс 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.
const_iterator QVarLengthArray::cend() const
Возвращает const STL-итератор, указывающий на мнимый элемент после последнего элемента в массиве.
Эта функция была добавлена в Qt 5.0.
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() перед вызовом этой функции.
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.
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 *), новые элементы не инициализируются. Для других типов элементы инициализируются значением по умолчанию.
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_MARKERQVarLengthArray<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()).
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