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


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

    ​ 例如:

    1. #include <QCoreApplication>
    2. #include <QQueue>
    3. #include <QDebug>
    4. int main(int argc, char *argv[])
    5. {
    6.     QCoreApplication a(argc, argv);
    7.     QQueue<int> queue;
    8.     //入队操作
    9.     queue.enqueue(1);
    10.     queue.enqueue(2);
    11.     queue.enqueue(3);
    12.     //当全部元素入队后,队列大小为3
    13.     qDebug()<<queue.size();
    14.     
    15.     //执行出队操作
    16.     while (!queue.isEmpty())
    17.         qDebug() << queue.dequeue() << Qt::endl;
    18.     //当全部元素都出队后,队列大小为0
    19.     qDebug()<<queue.size();
    20.     return a.exec();
    21. }


    ​ 该示例输出结果为:

    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()函数提供对最上面的项的访问。

    ​ 例如以下代码:

    1. #include <QCoreApplication>
    2. #include <QStack>
    3. #include <QDebug>
    4. #incluee <QString>
    5. int main(int argc, char *argv[])
    6. {
    7.     QCoreApplication a(argc, argv);
    8.     
    9.     QStack<QString> stack;
    10.     stack.push("iriczhao");
    11.     stack.push("hello");
    12.     stack.push("world");
    13.     
    14.     //入栈后,stack大小为3
    15.     qDebug()<<stack.size();
    16.     
    17.     //执行出栈操作
    18.     while (!stack.isEmpty())
    19.         qDebug() << stack.pop() << stack.size()<<Qt::endl;
    20.     //出栈后,stack大小为0
    21.     qDebug()<<stack.size();
    22.     
    23.     return a.exec();
    24. }

    ​ 输出结果为:

    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把队列/栈的概念更加具体化。
     

  • 相关阅读:
    以绝对优势立足:从CDN和云存储来聊聊云生态的崛起
    力扣26:删除有序数组中的重复项
    五、互联网技术——网络管理命令
    mac苹果电脑有什么免费的系统清理软件?
    java自定义注解
    Python之字符串格式化
    对于爬虫的学习
    754、到达终点数字
    C语言之结构体的有关知识
    希望所有计算机学生都知道这些宝藏课程
  • 原文地址:https://blog.csdn.net/delphigbg/article/details/127993485