Qt 迭代器

(一) java風格迭代器

迭代點位於第一個列表項前面或者列表項的中間或者在最後一個的列表項的後面,不是直接指向某個列表項

容器類 只讀迭代器類 讀寫迭代器類
QList< T >,QQueue< T > QListIterator< T > QMutableListIterator< T >
QLinkList< T > QLinkListIterator< T > QMutableLinkListIterator< T >
QVetor< T >,QStack< T > QVectorIterator< T > QMutableVectorIterator< T>

1. QListIterator類

1. 初始化

QList<int> list;
list<<1<<2<<3<<4<<5;
QListIterator<int> i(list);//指向列表第一項前面
while(i.hasNext())
qDebug()<<i.next();

2. findNext()

bool findNext(const T &value)
從前向後遍歷,如果找到值,返回true;否則返回false。且找到後,迭代點是在該元素後面

3. findPrevious()

bool findPrevious(const T &value)
從後向前遍歷,如果找到值,返回true;否則返回false,且找到後,迭代點是在該元素前面

4. hasNext()

bool hasNext() const
從前向後遍歷,如果當前迭代點後面有元素,返回true,否則false

5. hasPrevious()

bool hasPrevious() const
從後向前遍歷,如果當前迭代點後面有元素,返回true,否則false

6. next()

const T &next()
會跳過下一列表項(迭代點移動到該列表項之後),並返回他跳過列表項的內容

7.previous()

T &previous()
返回前一個列表項內容,迭代點移動到該列表項之前

8.toBack()

void toBack()
將迭代點移動到最後一個列表項之後

9.toFront()

void toFront()
將迭代點移動到第一個列表項之前

10.peekPrevious()/peekNext()

返回前(後)一個列表項,但不移動迭代點

其他只讀類接口和上述相同

3.QMutableListIterator類

有上述接口

1.insert()

void insert(const T &value)
在當前迭代器位置插入值。在調用之後,迭代器就位於插入的項之後。

2.remove()

void remove()
刪除使用遍歷函數(next()、previous()、findNext()、findPrevious())跳過的項。

3.setValue()

void setValue(const T &value) const
修改使用遍歷函數(next()、previous()、findNext()、findPrevious())跳過的項的值。

4.value()

const T &value() const
返回使用其中一個遍歷函數(next()、previous()、findNext()、findPrevious())跳過的最後一項的值。在調用next()或findNext()之後,value()相當於peekPrevious()。在調用previous()或findPrevious()之後,value()相當於peekNext()。

5.value()重載

T &value()
這是一個重載函數。返回對使用一個遍歷函數跳過的最後一個項的值的非常量引用。

其他讀寫類接口和上述相同

(二)STL風格迭代器

相當於指針,指向的是列表項(超前或者超尾)

容器類 只讀迭代器類 讀寫迭代器類
QList< T >,QQueue< T > QListI< T >::const_iterator QList< T >::iterator
QLinkList< T > QLInkListI< T >::const_iterator QLinkList< T >::iterator
QVetor< T >,QStack< T > QVector< T >::const_iterator QVector< T >::iterator

例子:

#include <QCoreApplication>
#include <QDebug>
int main(int argc,char* argv[])
{
    QCoreApplication a(argc,argv);
    QList<int> list;
    for(int i=0;i<10;i++)
    {
        list.insert(list.end(),i);
    }
    QList<int>::iterator i;
    for(i=list.begin();i!=list.end();i++)
    {
        qDebug()<<(*i);
        *i=(*i)*10;
    }
    qDebug()<<" //////// ";
    QList<int>::const_iterator ci;
    for(ci=list.constBegin();ci!=list.constEnd();ci++)
    {
        qDebug()<<(*ci);
    }
    return a.exec();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章