Мой вопрос в основном, когда выбрать QVector
и когда выбрать QList
как ваш контейнер Qt. Что я уже знаю:
- Qt docs: класс QList
Для большинства целей QList является подходящим классом. Его API на основе индексов более удобен, чем API-интерфейс, основанный на итераторе QLinkedList, и он обычно быстрее, чем QVector, из-за того, как он хранит свои элементы в памяти. Он также расширяется до меньшего количества кода в вашем исполняемом файле.
-
То же самое написано в этом очень популярном Q & A: QVector vs QList. Он также поддерживает QList.
-
Но: на недавнем Всемирном саммите Qt 2015 KDAB представил "Почему QList вреден", это в основном здесь:
Не используйте QList, используйте Q_DECLARE_TYPEINFO
Насколько я понимаю, идея состоит в том, что QList
для почти всех типов неэффективен при распределении новых элементов в куче. Каждый раз, когда вы добавляете новый элемент, он вызывает new
(один раз на элемент), и это неэффективно по сравнению с QVector
.
Вот почему теперь я пытаюсь понять: это QVector
, который мы должны выбрать как контейнер по умолчанию?