• Qt学习笔记常用容器


    主要说Qt的以下几种容器

    1.QList<T>

    2.QLinkedList<T>

    3.Map<T>

    和一些常用的容器方法的使用

    qSort

    qCopy

    qFind

    1.QList<T>泛型集合是最常用的一种容器

    看一下它的常用 操作

    添加删除和两个迭代器

    QListIterator和QMutableListIterator
    #include <QCoreApplication>
    #include<QList>
    #include<QDebug>
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QList<int> listInt;
    
        //添加
        for(int i =0;i<10;i++)
        {
            listInt.append(i);
            //也可以这样添加元素
            //listInt<<i;
        }
        //删除
        qDebug()<<"删除3";
        listInt.removeAt(3);
        //查询
        foreach (int item, listInt) {
            qDebug()<<item;
        }
    
    
        qDebug()<<"Iterator";
    
        //迭代器
        QListIterator<int> iterator(listInt);
        while(iterator.hasNext())
        {
    
            qDebug()<<iterator.next();
            if(iterator.hasNext())
            qDebug()<<"the Next is :"<<iterator.peekNext();
        }
        //返转
        iterator.toBack();
        while(iterator.hasPrevious())
        {
            qDebug()<<iterator.previous();
        }
        qDebug()<<"可变迭代器QMutableListIterator";
        //可变的迭代器
        QMutableListIterator<int> mutableiterator(listInt);
        mutableiterator.insert(13);
        mutableiterator.insert(14);
        mutableiterator.insert(15);
        while(mutableiterator.hasNext())
        {
           int i=  mutableiterator.next();
           if(i==2||i==6)
           {
               mutableiterator.remove();
           }
        }
    
        //查询
        foreach (int item, listInt) {
            qDebug()<<item;
        }
        return a.exec();
    }

    2.QLinkedList<T> 

    QLinkedList<T>和QList<T>差不多,不同的一点是它是用迭代器做的访问项

    也就是说QList<int> list只以通过这样访问它的内容list[i]而QLinkedList不可以只能用Iterator

    性能上它要高于QList<T>

    #include <QCoreApplication>
    #include<QLinkedList>
    #include<QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QLinkedList<int> link;
        link<<1<<2<<2<<3<<4;
        qDebug()<<"迭代器访问QLinkedListIterator";
        QLinkedListIterator<int> iterator(link);
        while(iterator.hasNext())
        {
            qDebug()<< iterator.next();
        }
        //删除第一个2
        link.removeOne(2);
        //添加两个3这两种方式一样
        link.push_back(3);
        link.append(3);
        //删除所有的3
        link.removeAll(3);
        qDebug()<<"普通访问foreach";
        foreach (int item, link) {
            qDebug()<< item;
        }
    
        qDebug()<<"迭代器QMutableLinkedListIterator";
        QMutableLinkedListIterator<int> mutableIter(link);
    
        while(mutableIter.hasNext())
        {
            int i= mutableIter.next();
            if(i==1)
            {
                mutableIter.insert(90);
            }
            if(i==4)
            {
                mutableIter.remove();
            }
            qDebug()<<i;
        }
        qDebug()<<"迭代器QMutableLinkedListIterator重新访问";
        mutableIter.toFront();
        while(mutableIter.hasNext())
        {
            int i= mutableIter.next();
            qDebug()<<i;
        }
        //mutable
        return a.exec();
    }
    a

    3Map<T>

    map类型是一个键值对 key/value组成 其它的和上边的两个集合没什么区别 

    #include <QCoreApplication>
    #include<QMap>
    #include<QDebug>
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QMap<int,QString> map;
        map.insert(1,"a");
        map.insert(2,"b");
        map.insert(3,"c");
        QMutableMapIterator<int,QString> mutableIte(map);
        while(mutableIte.hasNext())
        {
            mutableIte.next();
            qDebug()<<mutableIte.key()<<" "<<mutableIte.value();
        }
        return a.exec();
    }

    下边说一下常用的集合操作方法

    qSort

    qCopy

    qFind

    #include <QCoreApplication>
    #include<QList>
    #include<QDebug>
    #include<QVector>
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QList<int> listStrs;
        listStrs<<10<<5<<8<<2<<7;
        qSort(listStrs);
        foreach (int i, listStrs) {
            qDebug()<<i;
        }
        qDebug()<<"____________________________";
        listStrs.clear();
        listStrs<<10<<5<<8<<2<<7;
        qSort(listStrs.begin()+1,listStrs.end()-1);
        foreach (int i, listStrs) {
            qDebug()<<i;
        }
    
    
        qDebug()<<"______________qCopy______________";
        QVector<int> newVec(5);
        qCopy(listStrs.begin(),listStrs.end(),newVec.begin());
        foreach (int i, newVec) {
            qDebug()<<i;
        }
        qDebug()<<"______________qFind______________";
        listStrs.clear();
        listStrs<<2<<5<<8<<2<<7;
        QList<int>::const_iterator iterFin=qFind(listStrs,2);
        if(iterFin!=listStrs.end())
        {
            qDebug()<<*iterFin;
        }
        else
        {
            qDebug()<<"notFound!";
        }
        return a.exec();
    }
  • 相关阅读:
    jstl嵌套以及输出json的逗号
    关闭win10 更新以后自动重启
    maven 配置错误。
    SQL SERVER 订阅发布在restore DB以后的问题
    Unable to convert MySQL date/time value to System.DateTime
    sql server恢复卡在restoring的解决方法
    打开Excel时总是运行Windows Installer(Visual studio)解决方法
    单元测试用excel connstr
    node.js调试
    javascript数组对象实例方法
  • 原文地址:https://www.cnblogs.com/li-peng/p/3653908.html
Copyright © 2020-2023  润新知