Qt все элементы вектора

Видео:vector | Библиотека стандартных шаблонов (stl) | Уроки | C++ | #1Скачать

vector | Библиотека стандартных шаблонов (stl) | Уроки | C++ | #1

Оглавление

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

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

Видео:Qt - Фильтрация элементов моделиСкачать

Qt - Фильтрация элементов модели

Открытые типы

typedefConstIterator
typedefIterator
typedefconst_iterator
typedefconst_pointer
typedefconst_reference
typedefdifference_type
typedefiterator
typedefpointer
typedefreference
typedefsize_type
typedefvalue_type

Видео:0026 QVector в QtСкачать

0026 QVector в Qt

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

QVector ()
QVector ( int size )
QVector ( int size, const T & value )
QVector ( const QVector & other )

QVector ()

voidappend ( const T & value )
const T &at ( int i ) const
referenceback ()
const_referenceback () const
iteratorbegin ()
const_iteratorbegin () const
intcapacity () const
voidclear ()
const_iteratorconstBegin () const
const T *constData () const
const_iteratorconstEnd () const
boolcontains ( const T & value ) const
intcount ( const T & value ) const
intcount () const
T *data ()
const T *data () const
boolempty () const
iteratorend ()
const_iteratorend () const
boolendsWith ( const T & value ) const
iteratorerase ( iterator pos )
iteratorerase ( iterator begin, iterator end )
QVector &fill ( const T & value, int size = -1 )
T &first ()
const T &first () const
T &front ()
const_referencefront () const
intindexOf ( const T & value, int from = 0 ) const
voidinsert ( int i, const T & value )
iteratorinsert ( iterator before, int count, const T & value )
voidinsert ( int i, int count, const T & value )
iteratorinsert ( iterator before, const T & value )
boolisEmpty () const
T &last ()
const T &last () const
intlastIndexOf ( const T & value, int from = -1 ) const
QVectormid ( int pos, int length = -1 ) const
voidpop_back ()
voidpop_front ()
voidprepend ( const T & value )
voidpush_back ( const T & value )
voidpush_front ( const T & value )
voidremove ( int i )
voidremove ( int i, int count )
voidreplace ( int i, const T & value )
voidreserve ( int size )
voidresize ( int size )
intsize () const
voidsqueeze ()
boolstartsWith ( const T & value ) const
QListtoList () const
std::vectortoStdVector () const
Tvalue ( int i ) const
Tvalue ( int i, const T & defaultValue ) const
booloperator!= ( const QVector & other ) const
QVectoroperator+ ( const QVector & other ) const
QVector &operator+= ( const QVector & other )
QVector &operator+= ( const T & value )
QVector &operator &operator & other )
QVector &operator= ( const QVector & other )
booloperator== ( const QVector & other ) const
T &operator[] ( int i )
const T &operator[] ( int i ) const

Видео:Основы программирования на Qt. Model View Controller. Списки и таблицыСкачать

Основы программирования на Qt. Model View Controller. Списки и таблицы

Статические открытые члены

QVectorfromList ( const QList & list )
QVectorfromStdVector ( const std::vector & vector )

Видео:Программирование на С++. Урок 70. ВекторСкачать

Программирование на С++. Урок 70. Вектор

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

QDataStream &operator & vector )
QDataStream &operator>> ( QDataStream & in, QVector & vector )

Видео:Qt - Компоновка виджетов 1 (для начинающих)Скачать

Qt - Компоновка виджетов 1 (для начинающих)

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

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

QVector является одним из общих контейнерных классов Qt. Он хранит свои элементы в смежных ячейках памяти и обеспечивает быстрый доступ по индексу.

QList , QLinkedList и QVarLengthArray предоставляют схожую функциональность. Вот краткий обзор:

  • Для большинства целей правильным классом для использования является QList. Такие операции, как prepend() и insert(), как правило, быстрее, чем в QVector, из-за способа хранения элементов QList в памяти (за подробностями обращайтесь к разделу Алгоритмическая сложность), а его основанный на индексе API более удобен, чем основанный на итераторах API QLinkedList. Он также разворачивается в меньший код в вашем исполняемом файле.
  • Если вам необходим действительно связанный список, с гарантированным постоянным временем вставки в середину списка и итераторами к элементам, а не индексами, то используйте QLinkedList.
  • Если вы хотите, чтобы элементы занимали смежные ячейки в памяти, или если ваши элементы больше, чем указатель, и вы хотите избежать накладных расходов на индивидуальное выделение для них места в «куче» во время вставки, то используйте QVector.
  • Если вам необходим низкоуровневый массив переменного размера, то, возможно, будет достаточно QVarLengthArray.

Вот пример QVector, который хранит целые числа, и QVector, который хранит значения QString:

QVector сохраняет вектор (или массив) элементов. Как правило, векторы создаются с начальным размером. Например, следующий код создаёт QVector с 200 элементами:

Элементы автоматически инициализируются значениями, создаваемыми по умолчанию. Если вы хотите инициализировать вектор другими значениями, передайте это значение как второй аргумент в конструктор:

Вы также можете в любое время вызвать fill() для заполнения вектора нужным значением.

QVector использует индексы, начинающиеся с 0, как принято в массивах C++. Для доступа к элементу с позицией по определённому индексу вы можете использовать operator[](). В неконстантных векторах operator[]() возвращает ссылку на элемент, который может быть использован с левой стороны присваивания:

Для доступа «только для чтения» существует альтернативный синтаксис at():

at() может работать быстрее, чем operator[](), потому что при этом никогда не создается полной копии.

Другим способом получения доступа к данным, сохранённым в QVector, является вызов data(). Функция возвращает указатель на первый элемент в векторе. Вы можете использовать указатель для прямого доступа и изменения элементов, хранящихся в векторе. Указатель также полезен в том случае, если вам необходимо передать QVector в функцию, принимающую простой массив C++.

Если вы хотите найти все вхождения определённого значения в векторе, то используйте indexOf() или lastIndexOf(). Первая функция осуществляет поиск вперед от указанной позиции, а последняя — осуществляет поиск назад. Обе возвращают индекс соответствующего элемента, если он найден; в противном случае возвращается -1. Например:

Если вам необходимо просто проверить, содержит ли вектор определённое значение, то используйте 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 - Простая сортировка элементов в моделях

Qt Documentation

Contents

The QVector class is a template class that provides a dynamic array. More.

Note: All functions in this class are reentrant.

Видео:Qt - Сортировка элементов через прокси-модельСкачать

Qt - Сортировка элементов через прокси-модель

Public Types

Header:#include
qmake:QT += core
Inherited By:
typedefConstIterator
typedefIterator
typedefconst_iterator
typedefconst_pointer
typedefconst_reference
typedefconst_reverse_iterator
typedefdifference_type
typedefiterator
typedefpointer
typedefreference
typedefreverse_iterator
typedefsize_type
typedefvalue_type

Видео:Что такое Qt и что с ним можно сделатьСкачать

Что такое Qt и что с ним можно сделать

Public Functions

QVector(InputIterator first, InputIterator last)
QVector(std::initializer_list args)
QVector(QVector &&other)
QVector(const QVector &other)
QVector(int size, const T &value)
QVector(int size)
QVector()
QVector &operator=(QVector &&other)
QVector &operator=(const QVector &other)

QVector()

voidappend(const T &value)
voidappend(T &&value)
voidappend(const QVector &value)
const T &at(int i) const
QVector::referenceback()
QVector::const_referenceback() const
QVector::iteratorbegin()
QVector::const_iteratorbegin() const
intcapacity() const
QVector::const_iteratorcbegin() const
QVector::const_iteratorcend() const
voidclear()
QVector::const_iteratorconstBegin() const
const T *constData() const
QVector::const_iteratorconstEnd() const
const T &constFirst() const
const T &constLast() const
boolcontains(const T &value) const
intcount(const T &value) const
intcount() const
QVector::const_reverse_iteratorcrbegin() const
QVector::const_reverse_iteratorcrend() const
T *data()
const T *data() const
boolempty() const
QVector::iteratorend()
QVector::const_iteratorend() const
boolendsWith(const T &value) const
QVector::iteratorerase(QVector::iterator pos)
QVector::iteratorerase(QVector::iterator begin, QVector::iterator end)
QVector &fill(const T &value, int size = -1)
T &first()
const T &first() const
T &front()
QVector::const_referencefront() const
intindexOf(const T &value, int from = 0) const
voidinsert(int i, T &&value)
voidinsert(int i, const T &value)
voidinsert(int i, int count, const T &value)
QVector::iteratorinsert(QVector::iterator before, int count, const T &value)
QVector::iteratorinsert(QVector::iterator before, const T &value)
QVector::iteratorinsert(QVector::iterator before, T &&value)
boolisEmpty() const
T &last()
const T &last() const
intlastIndexOf(const T &value, int from = -1) const
intlength() const
QVectormid(int pos, int length = -1) const
voidmove(int from, int to)
voidpop_back()
voidpop_front()
voidprepend(T &&value)
voidprepend(const T &value)
voidpush_back(const T &value)
voidpush_back(T &&value)
voidpush_front(T &&value)
voidpush_front(const T &value)
QVector::reverse_iteratorrbegin()
QVector::const_reverse_iteratorrbegin() const
voidremove(int i)
voidremove(int i, int count)
intremoveAll(const T &t)
voidremoveAt(int i)
voidremoveFirst()
voidremoveLast()
boolremoveOne(const T &t)
QVector::reverse_iteratorrend()
QVector::const_reverse_iteratorrend() const
voidreplace(int i, const T &value)
voidreserve(int size)
voidresize(int size)
voidshrink_to_fit()
intsize() const
voidsqueeze()
boolstartsWith(const T &value) const
voidswap(QVector &other)
voidswapItemsAt(int i, int j)
TtakeAt(int i)
TtakeFirst()
TtakeLast()
QListtoList() const
std::vectortoStdVector() const
Tvalue(int i) const
Tvalue(int i, const T &defaultValue) const
booloperator!=(const QVector &other) const
QVectoroperator+(const QVector &other) const
QVector &operator+=(const QVector &other)
QVector &operator+=(const T &value)
QVector &operator+=(T &&value)
QVector &operator &operator &other)
QVector &operator &operator=(std::initializer_list args)
booloperator==(const QVector &other) const
T &operator[](int i)
const T &operator[](int i) const

Видео:Qt - Покадровая анимация 2D-графики 1 (Графические элементы)Скачать

Qt - Покадровая анимация 2D-графики 1 (Графические элементы)

Static Public Members

QVectorfromList(const QList &list)
QVectorfromStdVector(const std::vector &vector)

Видео:Основы языка С++ в среде Qt Creator - Массивы/ЦиклыСкачать

Основы языка С++ в среде Qt Creator - Массивы/Циклы
uintqHash(const QVector &key, uint seed = 0)
booloperator &lhs, const QVector &rhs)
QDataStream &operator &vector)
booloperator &lhs, const QVector &rhs)
booloperator>(const QVector &lhs, const QVector &rhs)
booloperator>=(const QVector &lhs, const QVector &rhs)
QDataStream &operator>>(QDataStream &in, QVector &vector)

Видео:Урок 28 - Работа с QTableWidget и с QTimerСкачать

Урок 28 - Работа с QTableWidget и с QTimer

Detailed Description

QVector is one of Qt’s generic container classes. It stores its items in adjacent memory locations and provides fast index-based access.

QList , QLinkedList , QVector , and QVarLengthArray provide similar APIs and functionality. They are often interchangeable, but there are performance consequences. Here is an overview of use cases:

  • QVector should be your default first choice. QVector will usually give better performance than QList , because QVector always stores its items sequentially in memory, where QList will allocate its items on the heap unless sizeof(T) and T has been declared to be either a Q_MOVABLE_TYPE or a Q_PRIMITIVE_TYPE using Q_DECLARE_TYPEINFO. See the Pros and Cons of Using QList for an explanation.
  • However, QList is used throughout the Qt APIs for passing parameters and for returning values. Use QList to interface with those APIs.
  • If you need a real linked list, which guarantees constant time insertions mid-list and uses iterators to items rather than indexes, use QLinkedList.

Note: QVector and QVarLengthArray both guarantee C-compatible array layout. QList does not. This might be important if your application must interface with a C API.

Note: Iterators into a QLinkedList and references into heap-allocating QLists remain valid as long as the referenced items remain in the container. This is not true for iterators and references into a QVector and non-heap-allocating QLists.

Here’s an example of a QVector that stores integers and a QVector that stores QString values:

QVector stores its items in a vector (array). Typically, vectors are created with an initial size. For example, the following code constructs a QVector with 200 elements:

The elements are automatically initialized with a default-constructed value. If you want to initialize the vector with a different value, pass that value as the second argument to the constructor:

You can also call fill() at any time to fill the vector with a value.

QVector uses 0-based indexes, just like C++ arrays. To access the item at a particular index position, you can use operator[](). On non-const vectors, operator[]() returns a reference to the item that can be used on the left side of an assignment:

For read-only access, an alternative syntax is to use at():

at() can be faster than operator[](), because it never causes a deep copy to occur.

Another way to access the data stored in a QVector is to call data(). The function returns a pointer to the first item in the vector. You can use the pointer to directly access and modify the elements stored in the vector. The pointer is also useful if you need to pass a QVector to a function that accepts a plain C++ array.

If you want to find all occurrences of a particular value in a vector, use indexOf() or lastIndexOf(). The former searches forward starting from a given index position, the latter searches backward. Both return the index of the matching item if they found one; otherwise, they return -1. For example:

If you simply want to check whether a vector contains a particular value, use contains(). If you want to find out how many times a particular value occurs in the vector, use count().

QVector provides these basic functions to add, move, and remove items: insert(), replace(), remove(), prepend(), append(). With the exception of append() and replace(), these functions can be slow (linear time) for large vectors, because they require moving many items in the vector by one position in memory. If you want a container class that provides fast insertion/removal in the middle, use QList or QLinkedList instead.

Unlike plain C++ arrays, QVectors can be resized at any time by calling resize(). If the new size is larger than the old size, QVector might need to reallocate the whole vector. QVector tries to reduce the number of reallocations by preallocating up to twice as much memory as the actual data needs.

If you know in advance approximately how many items the QVector will contain, you can call reserve(), asking QVector to preallocate a certain amount of memory. You can also call capacity() to find out how much memory QVector actually allocated.

Note that using non-const operators and functions can cause QVector to do a deep copy of the data. This is due to implicit sharing.

QVector’s value type must be an assignable data type. This covers most data types that are commonly used, but the compiler won’t let you, for example, store a QWidget as a value; instead, store a QWidget *. A few functions have additional requirements; for example, indexOf() and lastIndexOf() expect the value type to support operator==() . These requirements are documented on a per-function basis.

Like the other container classes, QVector provides Java-style iterators (QVectorIterator and QMutableVectorIterator) and STL-style iterators (QVector::const_iterator and QVector::iterator). In practice, these are rarely used, because you can use indexes into the QVector.

In addition to QVector, Qt also provides QVarLengthArray, a very low-level class with little functionality that is optimized for speed.

QVector does not support inserting, prepending, appending or replacing with references to its own values. Doing so will cause your application to abort with an error message.

More Information on Using Qt Containers

For a detailed discussion comparing Qt containers with each other and with STL containers, see Understand the Qt Containers.

Maximum size and out-of-memory conditions

The current version of QVector is limited to just under 2 GB (2^31 bytes) in size. The exact value is architecture-dependent, since it depends on the overhead required for managing the data block, but is no more than 32 bytes. The number of elements that can be stored in a QVector is that size divided by the size of each element.

In case memory allocation fails, QVector will use the Q_CHECK_PTR macro, which will throw a std::bad_alloc exception if the application is being compiled with exception support. If exceptions are disabled, then running out of memory is undefined behavior.

Note that the operating system may impose further limits on applications holding a lot of allocated memory, especially large, contiguous blocks. Such considerations, the configuration of such behavior or any mitigation are outside the scope of the Qt API.

Видео:Qt/C++ Лекция 5 - vector, деструктор класса, параметры конструкторов, передача параметров программеСкачать

Qt/C++ Лекция 5 - vector, деструктор класса, параметры конструкторов, передача параметров программе

Урок №4. Контейнеры в Qt5

Обновл. 16 Сен 2021 |

Библиотека контейнеров Qt5 является универсальной коллекцией шаблонов классов и алгоритмов, позволяющих программистам легко реализовывать общие структуры данных, такие как очереди, списки и стеки.

Видео:06 - Qt C++ - Технология Model-View (чистый код без дизайнеров и интеграторов)Скачать

06 - Qt C++ - Технология Model-View (чистый код без дизайнеров и интеграторов)

Контейнеры в Qt5

Контейнеры — это классы общего назначения, которые хранят в себе значения заданного типа. В языке С++ имеется свой набор контейнеров, который называется STL.

Стоит отметить, что идеологии контейнеров Qt и STL, при всей своей схожести, отличаются в следующем:

Фреймворк Qt5 предоставляет максимально богатый интерфейс, а копирование контейнера происходит за константное время, но цена этому — дополнительные проверки при доступе к разделяемым данным (implicit data sharing).

В свою очередь, STL предоставляет ограниченный интерфейс и следует идеологии уменьшения необоснованного расхода процессорного времени, памяти, ненужной нагрузки и пр.

Мы же, программируя на Qt, можем использовать как Qt-контейнеры, так и STL. Если вы не знакомы с STL или предпочитаете работать «только с Qt», то можете использовать классы Qt вместо классов STL.

На этом уроке мы рассмотрим следующие контейнеры:

Есть 2 типа контейнеров:

Последовательные — элементы хранятся друг за другом (последовательно). Примерами последовательных контейнеров являются QList, QVector, QLinkedList.

Ассоциативные — элементы хранятся в виде пары ключ-значение. Примерами ассоциативных контейнеров являются QMap и QHash.

Видео:Денис Кормалёв | Метаобъектная система QtСкачать

Денис Кормалёв | Метаобъектная система Qt

Контейнер QVector

QVector — это шаблонный класс, который представляет динамический массив. Данный контейнер хранит свои элементы в соседних участках памяти, а доступ к ним осуществляется при помощи индексов. Для векторов с большим количеством элементов вставка значений в начало или в середину вектора может происходить довольно медленно, потому что это может сопровождаться перемещением большого количества элементов в памяти на одну позицию, поэтому в подобных случаях рекомендуется использовать QList вместо QVector.

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

Результат выполнения программы:

Qt все элементы вектора

Видео:0027 Контейнер QListСкачать

0027 Контейнер QList

Контейнер QList

QList — это контейнер, который предназначен для создания списка элементов. QList во многом похож на QVector. Он хранит список значений указанного типа и обеспечивает быстрый доступ к ним с помощью индексов, а также вставку и удаление элементов. Это один из наиболее часто используемых контейнеров в Qt.

Пример использования контейнера QList:

Результат выполнения программы:

Qt все элементы вектора

Видео:Изучение Qt Creator | Урок #4 - Работа с окнами и создание приложения для авторизацииСкачать

Изучение Qt Creator | Урок #4 - Работа с окнами и создание приложения для авторизации

Контейнер QStringList

QStringList — это контейнер, который предоставляет список строк. Он удобен прежде всего тем, что имеет дополнительные методы для фильтрации данных и легко взаимодействует со стандартными компонентами Qt, «понимающими» строки QString. Он также поддерживает быстрый доступ к элементам, их вставку и удаление.

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

Результат выполнения программы:

Qt все элементы вектора

Видео:Qt - Модель/представление часть 1Скачать

Qt - Модель/представление часть 1

Контейнер QSet

QSet предоставляет однозначный (без повторений) математический набор с возможностью быстрого поиска элементов. Значения хранятся в неопределенном порядке.

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

Результат выполнения программы:

Qt все элементы вектора

Контейнер QMap

QMap — это ассоциативный массив (словарь), который хранит пары ключ-значение. Он обеспечивает быстрый поиск значения, ассоциированного с ключом. В следующем примере у нас есть два словаря, в которых мы сопоставляем ключ в виде строки целочисленному значению:

Результат выполнения программы:

Qt все элементы вектора

Сортировка пользовательских классов

В следующем примере мы выполним сортировку объектов пользовательского класса в QList.

Ниже представлен заголовочный файл book.h для нашего пользовательского класса Book (книга):

А здесь реализация класса Book (у нас есть два геттеры для доступа к элементам класса):

Далее мы создадим несколько объектов класса Book и отсортируем их с помощью алгоритма std::sort():

CompareByTitle() — это функция сравнения, используемая алгоритмом сортировки:

Алгоритм std:: sort() сортирует книги в списке по заголовку:

Результат выполнения программы:

Qt все элементы вектора

На этом всё! До следующего урока.

Поделиться в социальных сетях:

Урок №3. Дата и время в Qt5

Комментариев: 10

И несколько не по теме.
Роман Льва Николаевича Толстого «Война и мiр» на современном языке — это «Война и общество». Таким образом: «War and society».

Интересное замечание, но сейчас официальным переводом является именно «War and Peace». Если официально примут название «War and Society», тогда можно будет менять, а пока в статье всё ок))

Здравствуйте! Было бы неплохо чуть подробнее описать когда правильнее использовать контейнеры stl, когда Qt.

Есть правило: «When in Rome… Do as the Romans Do».
Если вы работаете с Qt лучше использовать Qt контейнеры.
Например , подумайте, что будет если вам надо будет передать
данные в функцию Qt. Вам придётся писать код по преобразованию stl контейнеров в Qt контейнеры и наоборот.
Больше информации тут.
https://stackoverflow.com/questions/1668259/stl-or-qt-containers

Спасибо за уроки и за урок в частности.

Небольшое замечание по поводу QList. В уроке указано следующее по поводу QList:»Он хранит список значений указанного типа и обеспечивает быстрый доступ к ним с помощью индексов, а также быстрые вставку и удаление элементов.»
В документации же на qt (ссылка https://doc.qt.io/qt-5/qlist.html#details от 26.11.2019) написано » It stores items in a list that provides fast index-based access and index-based insertions and removals.», что можно перевести как » Он хранит элементы в списке, который обеспечивает быстрый доступ по индексу и, основанные на индексах, вставку и удаление.» Быстрой вставки и удаления в произвольное место QList не обеспечивает потому, что он представляет собой массив, в котором содержатся ссылки на хранимые в нем объекты. Согласно статье «Container Class» (https://doc.qt.io/qt-5/containers.html#algorithmic-complexity от 26.11.2019) сложность вставки для QList соответствует O(n), что соответствует сложности вставки для QVector.
В Qt5 объект, который обеспечивает «быструю» (сложностью O(1)) вставку и/или удаление в произвольное место обеспечивает контейнер QLinkedList.

Спасибо за замечание. В ближайшее время внесем в статью соответствующие правки. 🙂

Поделиться или сохранить к себе: