一步步学Qt,第十天-Q”STL”与STL-迭代器

一步步学Qt,第十天-Q”STL”与STL-迭代器


Qt提供了两类的迭代器,Java风格的和STL风格的。她们各自有自己的优势,使用java风格易于使用,使用STL风格的易于与STL的一些算法结合功能变得更加强大。

Java风格的迭代器,要知道他们本身不是直接指向项的,而是在第一项之前,最后以前之后或在两项之间:




在Java风格的迭代器中,hasNext()这个函数,与在Java数据库操作中的next()有相通之处,hasNext函数在当前迭代器之后还有项存在的话,就会返回一个true,数据库操作的next函数也是这样,不过next不仅是这样。当在当前位置之后还有项存在,next函数返回true,并指向下一个位置,之后在来判断新位置的下一个位置是否有数据项,这样一直到结束。而在Qt中Java风格的迭代器的next函数与Java数据库操作有相同之处,也有不同之处。Qt中的next函数,不仅会将迭代器移动到下一个项,而且会返回在移动之前的迭代器所在位置之后的那个项的值:

看一个小小的code:

QListIterator<int> qlistIterator(list);
    while(qlistIterator.hasNext()){
        cout << qlistIterator.next() << setw(2);
    }
    cout << endl;
在while中利用next获取了qlistIterator位置下面的一个项的值,并且走到下一个项之前的位置(一定记住,Iterator是在项与项之间的位置上)
完整code:
#include <QtCore/QCoreApplication>
#include <QList>
#include <QListIterator>
#include <iostream>
#include <iomanip>
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QList<int> list;
    //set values
    int var = 0;
    for(int i=0; i<3; i++){
        cout << "Enter var's value:";
        cin >> var;
        list.append(var);
    }
    //get values
    QListIterator<int> qlistIterator(list);
    while(qlistIterator.hasNext()){
        cout << qlistIterator.next() << setw(2);
    }
    cout << endl;
    return a.exec();
}

运行效果:



posted @ 2011-09-02 10:02  Podevor  阅读(945)  评论(0编辑  收藏  举报