QQueue的反向遍历小栗子

可能因为某个具体的需求,需要对QQueue容器内的数据进行反向遍历,即从尾到头进行遍历。因对数据结构各种容器模板没有过多的见解,遂不献丑,相关问题不明白的自行查看相关文档或者百度。
下面是我写的一个小栗子:
1.首先构建一个类:它的作用很简单就是保存几个设备的相关数据;
devicedata.h

#ifndef DEVICEDATA_H
#define DEVICEDATA_H

#include <QObject>
#include <QDateTime>
class DeviceData : public QObject
{
    Q_OBJECT
public:
    explicit DeviceData(QString id,QString tag,QString data,QObject *parent = 0);
    explicit DeviceData(QString id,QString data);
    explicit DeviceData();
    ~DeviceData();
    QString ID() const;
    void setID(const QString &ID);
    QString Data() const;
    void setData(const QString &Data);
    QObject *Obj() const;
    void setObj(QObject *Obj);
    QString Tag() const;
    void setTag(const QString &Tag);
signals:
private:
    QString m_ID;
    QString m_Tag;
    QString m_Data;
    QObject *m_Obj;
public slots:
};
#endif // DEVICEDATA_H

实现文件:

#include "devicedata.h"

DeviceData::DeviceData(QString id, QString tag, QString data, QObject *parent) : QObject(parent)
{
    m_ID = id;
    m_Tag = tag;
    m_Data = data;
}

DeviceData::DeviceData(QString id, QString data)
{
    m_ID = id;
    m_Data = data;
}

DeviceData::DeviceData()
{

}

DeviceData::~DeviceData()
{

}
QString DeviceData::ID() const
{
    return m_ID;
}

void DeviceData::setID(const QString &ID)
{
    m_ID = ID;
}
QString DeviceData::Data() const
{
    return m_Data;
}

void DeviceData::setData(const QString &Data)
{
    m_Data = Data;
}

QObject *DeviceData::Obj() const
{
    return m_Obj;
}

void DeviceData::setObj(QObject *Obj)
{
    m_Obj = Obj;
}
QString DeviceData::Tag() const
{
    return m_Tag;
}

void DeviceData::setTag(const QString &Tag)
{
    m_Tag = Tag;
}

然后在main.cpp中写一个反向迭代的函数,具体代码:

#include <QCoreApplication>
#include <QQueue>
#include "devicedata.h"
#include <QDebug>
#include <QListIterator>
QString strData = "";
void iteratorData(QQueue<DeviceData*> deviceData,QString tag,QString ID)
{
    //QQueue继承自QList,所以直接使用QList的迭代器了。
    QListIterator<DeviceData*> itor(deviceData);
    itor.toBack();//从尾部开始遍历
    while(itor.hasPrevious())
    {
        if(itor.previous()->Tag() == tag)
        {
            itor.next();
            if(itor.previous()->ID() == ID)
            {
                //每调用一次previous()方法移动一次位置
                //所以把位置移回来
                itor.next();
                qDebug() << itor.previous()->Data();
                itor.next();
                strData = itor.previous()->Data();
                break;//找到一个即停止
                //如果需要查找全部符合的数据,将break;一行去掉即可
            }
        }
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QQueue<DeviceData*> deviceData;
    //往容器里加入20个数据
    deviceData.append(new DeviceData("2001","0A","32.12"));//A-1
    deviceData.append(new DeviceData("2004","0B","12.68"));//B-1
    deviceData.append(new DeviceData("2003","0B","14.62"));//B-2
    deviceData.append(new DeviceData("2003","0A","62.62"));//A-2
    deviceData.append(new DeviceData("2007","0A","37.22"));//A-3
    deviceData.append(new DeviceData("2006","0B","62.27"));//B-3
    deviceData.append(new DeviceData("2002","0B","55.14"));//B-4
    deviceData.append(new DeviceData("2006","0A","42.22"));//A-4
    deviceData.append(new DeviceData("2004","0A","83.92"));//A-5
    deviceData.append(new DeviceData("2003","0B","34.11"));//B-5
    deviceData.append(new DeviceData("2005","0A","76.14"));//A-6
    deviceData.append(new DeviceData("2001","0A","12.23"));//A-7
    deviceData.append(new DeviceData("2001","0B","32.23"));//B-6
    deviceData.append(new DeviceData("2002","0A","42.61"));
    deviceData.append(new DeviceData("2003","0B","92.11"));//B-7
    deviceData.append(new DeviceData("2002","0A","22.62"));
    deviceData.append(new DeviceData("2002","0B","35.41"));
    deviceData.append(new DeviceData("2005","0B","12.59"));
    deviceData.append(new DeviceData("2002","0A","45.02"));
    deviceData.append(new DeviceData("2007","0B","42.63"));
    qDebug() << "size:" << deviceData.size();
    //从尾至头查找Tag = 0A ID = 2001的一个数据;
    iteratorData(deviceData,"0A","2001");
    qDebug() << "strData:" << strData;
    qDebug() << "--------------------------------------";
    //同理
    iteratorData(deviceData,"0A","2007");
    qDebug() << "strData:" << strData;
    qDebug() << "--------------------------------------";
    return a.exec();
}

测试结果:
结果

如有何意见,请多多指教.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值