【Qt】一文总结Qt高级数据结构【栈和队列】
一、QQueueQQueue是Qt的一个通用容器类。该类为相同类型的项实现了队列数据结构。队列是先入先出(FIFO)结构。使用enqueue()将项目添加到队列的尾部,并使用dequeue()从头部检索项目。head()函数访问head项,而不需要删除它。例如:#include <QCoreApplication>#include <QQueue>#include &l
一、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把队列/栈的概念更加具体化。
更多推荐
所有评论(0)