QT中的容器和迭代器

QT中的容器和C++中的容器是很类似的,就是前面加了一个Q。容器分为关联容器和顺序容器,分类的标志应该是按照数据的存储或者排列来。

顺序容器:

        顾名思义是按顺序来的,常见的C++中有List,vector,stack,queue等。所以在QT中就是

        QList,QLinkedList,QVector,QStack和QQueue。

        Qlist:数组链表。提供下标缩影方式访问数据,和数组是一样的,也提供at()函数。

                示例:                  

                QList list;

                List<<”one”<<”two”<<”three”;

                QString str1 = list[1];//str1 == “two”

                QString str0 = list.at(0)//str2 == “one”

        QLinkedList,链式列表。除了不提供下标索引的方式外,其使用和QList基本相同。

        

        QStack:栈。

                Push(value)和pop(),来实现输入和输出。这点和C++相同

        QQueue:队列

                Enqueue(value) 和 dequeue(),来实现输入和输出。

关联容器:QMap,QSet,QMultiMap,QHash,QMultiHash.

                其中QMultiMap,QMultiHash。支持一个键关联多个值QSet,集合模板类。

                示例:

                        QMap:

                        QMap map;

                         map["one"] = 1;

                         map["two"] = 2;

                     ​​​​​​​     map["three"] = 3;

             ​​​​​​​             map.insert("four",4);

             ​​​​​​​             map.remove("two");

             ​​​​​​​             int t = map["four"];

             ​​​​​​​             qDebug()<<"---"<

             ​​​​​​​             qDebug()<<"---"<

                在使用value()函数值查找键值时,还可以指定一个缺省的返回值:

                int num = map.value("two",10);

                如果找到two,就返回相对应的值,否则返回10。

                在QMultiMap中,如果要获得键所对应的所有的值,就需要使用values

迭代器:分为Java迭代器和STL迭代器。

                STL迭代器:和C++中的迭代器一样,不过是多了一个只读迭代器。例如:

                                只读迭代器:QList::const_iterator

                                读写迭代器:QList::iterator

                这里着重介绍下Java迭代器还是分为只读和读写两种:

                                读写迭代器比只读迭代器名称上在前面多了一个Mutable。Java类型的迭代器的指针不是指向一个数据项,而是在数据项之间。这个需要和C++中的STL迭代器区分开。

例如:QListIterator和QMutableListIterator.

QList list;

     list<<"A"<<"B"<<"C";

     QListIterator i(list);

     // 由前至后

     while (i.hasNext()) {

         qDebug()<

    }

这里的几个函数还是比较好理解的,如果有下一个(hasnext()),我就输出下一个(next());

那么同理,倒着来的话,如果有前一个,那就输出前一个!

//由后至前

     QListIterator m(list);

     m.toBack();

     while (m.hasPrevious()) {

         qDebug()<

     }

OK,那么我们来简单的看看QMutableListIterator的使用。从定义来看这两个的定义就键和值的对应不同而已,并没有说使用上的不同,所以用法上是相同的。不在多说

QMutableListIterator的使用:

QList list;

     list<<1<<2<<3<<4<<5;

     QMutableListIterator i(list);

     while(i.hasNext()){

         if(i.next()%2==0)

             i.remove();

         qDebug()<

     }

---------------------------------------------------------------------------------------------------------------------------------好的,顺序容器看完了,现在我们来看看Java关联容器的迭代器。

QMap,键和值的映射集合。先来看看用法

QMap<QString,QString> map;

    map.insert("Paris","France");

    map.insert("New York","USA");

    map.insert("Mexico City","USA");

    map.insert("Moscow","Russia");

QMutableMapIterator<QString,QString> m(map);

    while(m.hasNext()){

        if(m.next().key().endsWith("City")){

            m.remove();

            qDebug()<<"hello";

        }

    }

a.startsWith(b) --判断字符串a,是不是以字符串b开头

a.endsWith(b) --判断字符串a,是不是以字符串b结尾

你可能感兴趣的:(C++自学,qt,容器,开发语言)