一步步学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(); }
运行效果: