【Qt】一文总结Qt高级数据结构【栈和队列】

一、QQueue

​ QQueue是Qt的一个通用容器类。该类为相同类型的项实现了队列数据结构。队列是先入先出(FIFO)结构。使用enqueue()将项目添加到队列的尾部,并使用dequeue()从头部检索项目。head()函数访问head项,而不需要删除它。

​ 例如:

#include <QCoreApplication>
#include <QQueue>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QQueue<int> queue;
    //入队操作
    queue.enqueue(1);
    queue.enqueue(2);
    queue.enqueue(3);
	//当全部元素入队后,队列大小为3
    qDebug()<<queue.size();
    
    //执行出队操作
    while (!queue.isEmpty())
        qDebug() << queue.dequeue() << Qt::endl;
	//当全部元素都出队后,队列大小为0
    qDebug()<<queue.size();

    return a.exec();
}

​ 该示例输出结果为:

3
1 

2 

3 

0

​ QQueue继承于QList。QList的所有功能也适用于QQueue。所以可以使用isEmpty()来检测队列是否为空,并且可以使用QList的iterator类(例如QListIterator)来遍历QQueue。但除此之外,QQueue还提供了三个方便的函数:enqueue()、dequeue()和head()。使先入先出(FIFO)的实现更加容易。

​ QQueue的值类型必须是可分配的数据类型。这涵盖了大多常用数据类型,但是编译器不允许将QWidget存储为QQueue的一个值,但是可以使用QWidget *。


二、QStack

​ QStack是Qt的一个泛型容器类。该类为相同类型的项实现堆栈数据结构。

​ 堆栈是后进先出(LIFO)结构。使用push()将项目添加到堆栈顶部,并使用pop()从顶部检索项目。top()函数提供对最上面的项的访问。

​ 例如以下代码:

#include <QCoreApplication>
#include <QStack>
#include <QDebug>
#incluee <QString>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QStack<QString> stack;
    stack.push("iriczhao");
    stack.push("hello");
    stack.push("world");
    
    //入栈后,stack大小为3
    qDebug()<<stack.size();
	
    //执行出栈操作
    while (!stack.isEmpty())
        qDebug() << stack.pop() << stack.size()<<Qt::endl;

    //出栈后,stack大小为0
    qDebug()<<stack.size();
    
    return a.exec();
}

​ 输出结果为:

3
"world" 2 

"hello" 1 

"iriczhao" 0 

0

​ QStack继承QVector。QVector的所有功能也适用于QStack。例如,可以使用isEmpty()来检测堆栈是否为空,并且可以使用QVector的迭代器类(例如QVectorIterator)遍历QStack。除此之外,QStack还提供了三个方便的函数:push()、pop()和top(),这使得LIFO的实现更加容易。

​ 与QQueue一样,QStack的值类型必须是可分配的数据类型。编译器不允许将QWidget存储为一个值;在实际使用中,可以用QStack存储一个QWidget *。

三、尾

​ 在实际开发中,队列和栈这两种数据结构也经常使用到,Qt的QQueue基于QList实现;QStack基于QVector实现,只是QQueue和QStack把队列/栈的概念更加具体化。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iriczhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值