【发布时间】:2015-12-13 06:46:13
【问题描述】:
我通过继承 QAbstractListModel 并使用 QVector 作为内部容器创建了一个 QListView 模型。我的模型只允许将文本附加到列表的后面,也只允许从前面删除项目。擦除操作是批处理的(即,每次列表变得太大时,我都会从前面擦除大约 10% 的项目)。
什么是最好的容器?
目前我正在使用 QVector,因为我希望与 QList 之类的东西相比,在这种情况下性能(连续内存布局)会更好。然而,我不确定 Qt 如何在内部访问容器以及容器是否连续是否有任何区别。
【问题讨论】:
-
你必须使用Qt容器吗?也许理想的只是标准 C++ 库的
std::deque。QVector很像std::vector并且需要恒定时间删除。QList非常类似于QVector存储指针有内存碎片。QVector和QList都需要线性时间删除才能从前面删除元素——这是杀手锏。您需要一个容器,其中推回和弹出前端都是恒定时间,理想情况下不是单独分配每个节点的链接结构。