【问题标题】:Pointer to an element in QList指向 QList 中元素的指针
【发布时间】:2019-03-08 22:38:04
【问题描述】:

我有一个具有这种类型的列表容器列表:

QList< QList<UAVObject *> > objects;

出于某种原因,我想快速访问其中一个内部列表。我可以存储指向内部列表的指针吗?例如:

QList<UAVObject *>& ref = objects[0];
QList<UAVObject *>* pt = &ref;

pt 的值在不同的函数调用和原始objects 操作中仍然有效吗?假设objects 列表只会被添加,而不会被移除。

【问题讨论】:

    标签: qt qt5


    【解决方案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 的非常好的文章
    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 2011-03-12
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多