指向 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 中元素的指针的主要内容,如果未能解决你的问题,请参考以下文章

将 QList 拆分为块、指针或引用?

Qt4 C++ Pointer to const QList of pointers

如何正确地将对象/指针存储到 Qlist 中

从指向结构数组的指针中提取元素

QList 列表指针的 释放

可以从指向子对象的指针中获得指向完整对象表示元素的指针吗?