【发布时间】:2014-12-01 19:19:57
【问题描述】:
我想要一个 QList,其中元素在删除一个时仍然在它们的位置。 所以它就像一个有洞或某事的列表。像这样。
【问题讨论】:
-
QLinkedList 甚至没有随机访问或索引。
我想要一个 QList,其中元素在删除一个时仍然在它们的位置。 所以它就像一个有洞或某事的列表。像这样。
【问题讨论】:
有不同语义的不同选项可用:
QMap<int, T>:“洞”根本不存在。访问孔会导致默认值/不存在。QVector<T>:空洞作为空值或默认构造值存在。这需要来自T 的空语义。这适用于许多 Qt 类型,如 QString、QDateTime,它们都有空值的概念 (=> isNull())。QVector<T*>:孔是nullptrs。如果你有一个纯“指针类型”,这非常有效,例如QObject-派生T。QHash<int, T>:与选项 1) 的想法基本相同,但要小心:QHash 以完全随机的哈希顺序遍历项目,而 QMap 以由 int)!【讨论】:
如果你想要一个list with holes 为什么不考虑QVector 指向你的对象的指针(QVector<MyCustomType*> myListWithHoles;)?...假设hole 你的意思是一个内存被释放的对象QVector指针会保留每个项目的位置,即使您销毁其中的一些并且您仍然可以访问每个项目的内存。
【讨论】:
使用QMap<int, your_type>。
【讨论】:
QHash<int, you_type> 也是一个选项。
QHash 以随机的哈希顺序遍历。如果他关心索引,他很可能想要索引顺序。