我开始使用Qt了,我一直在使用QQueue类作为std::queue的替代品。虽然今天我认为我能够使用QQueue对象上pop_front类的pop_back,push_front,push_back和QList函数。想知道为什么你能够在队列中使用这些功能(尤其是 pop_back 和 push_front ),我检查了Qt文档,并发现QQueue正在继承QList。
对我而言,队列的主要好处是充当队列:在后面排队东西,在前面排队。但是当我继续阅读文档时,我认为enqueue和dequeue函数只是QList类的append和takeFirst函数的等价物。甚至head函数也与QList的first函数相同。最重要的是,使用 pop_back 和 push_front 等函数的可能性完全打破了队列的初始逻辑,而文档本身则将QQueue类呈现为队列容器:
QQueue类是一个提供队列的通用容器。
QQueue是Qt的通用容器类之一。它为相同类型的项实现了队列数据结构。
队列是先进先出(FIFO)结构。使用enqueue()将项添加到队列的尾部,并使用dequeue()从头部检索。 head()函数提供对头项的访问而无需删除它。
对于QQueue类存在的目的,我有什么遗漏?我的意思是,为什么创建这个队列容器,以便它可以比队列应该做的更多?由于QQueue类似乎能够以与QList完全相同的方式工作,有没有理由在QList上使用QQueue?
答案 0 :(得分:3)
唯一的区别是您提到的其他方法:
主要观点是语义上更合适且直观的方法命名。
否则:
QQueue
与其基类QList
相同。QStack
与其基类QVector
相同。自己查看,看看源代码 - 这些类中没有额外的内容:
答案 1 :(得分:1)
QQueue
本身继承自QList
,只是添加了一些已在QList
中以不同名称出现的方法。除了语法糖之外没有必要使用它。