指向 QList 中元素的指针
Posted
技术标签:
【中文标题】指向 QList 中元素的指针【英文标题】:Pointer to an element in QList 【发布时间】:2019-03-08 22:38:04 【问题描述】:我有一个具有这种类型的列表容器列表:
QList< QList<UAVObject *> > objects;
出于某种原因,我想快速访问其中一个内部列表。我可以存储指向内部列表的指针吗?例如:
QList<UAVObject *>& ref = objects[0];
QList<UAVObject *>* pt = &ref;
pt
的值在不同的函数调用和原始objects
操作中仍然有效吗?假设objects
列表只会被添加,而不会被移除。
【问题讨论】:
【参考方案1】:QList
不是基于 STL 容器,与std::list
无关。
为 STL 容器指定的失效规则不适用。
根据Qt documentation(和我的理解),它使用指向项目的指针数组,除非项目不大于void*
并声明为可移动(使用Q_MOVABLE_TYPE )。
在这种情况下,项目直接存储在数组中,当列表增长时引用将变为无效(指针数组将被重新分配)。
【讨论】:
啊,这就是为什么他们可以在 O(1) 中实现[]
访问。
@ilya1725,与stl容器相比,QList更像是一个std::deque,所以也存在QLinkedList,它更像是一个列表
@MasterAler,我不知道,谢谢。为什么不按原样调用容器,即 dequeue 和 list?
@ilya1725,好吧,我只是猜测这个命名决定来自 Qt 容器使用的一些平均实践——当某人真的需要一个简单的链接时,这种情况并不常见列表,更有可能有人不想要/不需要 QVector,复杂的服务器后端通常不是用 Qt 编写的,毕竟 =)。因此,QList 对于一般情况来说是多用途和高效的,所有类都设计为可以快速轻松地使用(例如 QTcpSocket 不像真正的套接字那样可定制,但在使用时非常简单)。这是我的假设))
我建议 Marc Mutz 写一篇关于 Qt containers 的非常好的文章以上是关于指向 QList 中元素的指针的主要内容,如果未能解决你的问题,请参考以下文章