对容器类QList QLinkedList QVector的遍历
目录
0.QList QLinkedList QVector容器的时间复杂度比较
1.Java风格的迭代器
Java风格的迭代器的迭代点位于列表项的中间,而不是直接指向某个列表项。因此他的迭代点或者在第一个列表项的前面,或者在两个列表项之间,或者在最后一个列表项的后面。
对于每一个容器,Qt都提供了两种类型的Java风格迭代器数据类型:一种提供只读访问 一种提供读写访问
toFront(): 将迭代点移动到列表的前端(第一个列表项的前面)
peekNext():返回下一个列表项不移动迭代点
peekPrevious():返回前一个列表项不一定迭代点
findNext():从当前迭代点开始,向后查找指定的列表项。找到返回TRUE,此时迭代点位于匹配列表项的后面;否则返回false,迭代点位于最后一个列表项的后面
findPrevious():从当前迭代点开始,向前查找指定的列表项。找到返回TRUE,此时迭代点位于匹配列表项的前面;否则返回false,迭代点位于第一个列表项的前面
2.STL风格的迭代器
STL风格的迭代器的迭代点直接指向列表项。对于每一个容器,Qt都提供了两种类型的Java风格迭代器数据类型:一种提供只读访问 一种提供读写访问
QList::begin()函数:返回指向第一个列表项的迭代器
QList::end()函数:返回一个容器最后列表项之后的虚拟列表项,标记为无效位置的迭代器,用于判断是否到达容器的底部。
/*
* author:binbinzhang
* date:2018.4.21
* email:binbin_Erices@163.com
* version:1.0001
*
**/
#include <QDebug>
int main(int argc,char** argv)
{
QString str = "we hello world ";
qDebug()<<str;
// str = str.trimmed();
// str = str.simplified();
qDebug()<<str.startsWith("We",Qt::CaseSensitive)<<str.startsWith("We",Qt::CaseInsensitive);
QString str1 = "we hello world ";
QByteArray ba = str1.toUtf8();
qDebug()<<ba;
ba.append("B IN BBIN ");
qDebug()<<ba;
QList<QString> list;
{
QString str("This is problem");
list<<str;
}
qDebug()<<list[0];
//qDebug()<<list[1];ASSERT failure in QList<T>::operator[]: "index out of range"
list<<"bin"<<"hello world";
/************************** Java风格迭代器遍历容器 **************************/
//声明只读迭代器
QListIterator<QString> i(list);
/*
* 对列表进行从前往后遍历
* QListIterator<T>::hasNext()检查当前迭代点之后是否存在列表项
* 如果有调用 QListIterator<T>::next()进行遍历,next函数会跳过下一个列表项,并且返回它跳过列表项的内容
*
*/
for(;i.hasNext();)
{
qDebug()<<i.next();
}
/*
* 对列表进行从后往前遍历
* QListIterator<T>::toBack()将迭代点移动到最后一个列表项的后面
* QListIterator<T>::hasPrevious()检查当前迭代点之前是否存在列表项
* 如果有调用 QListIterator<T>::previous()进行遍历,previous函数会跳过前一个列表项,并且返回它跳过列表项的内容
*
*/
i.toBack();
for(;i.hasPrevious();)
{
qDebug()<<i.previous();
}
//qDebug()<<i.findNext("bin"); //true
qDebug()<<i.findNext("bin")<<i.findNext("zbb"); //false false 原因:函数的压栈顺序是从右到左的:
//创建读写迭代器
QMutableListIterator<QString> j(list);
/*
* QMutableListIterator<T>::insert()向列表中插入数据项
*/
j.insert("xiaoqiang");
j.insert("changsha");
for(j.toFront();j.hasNext();)
qDebug()<<j.next();
/************************** STL 风格迭代器遍历容器 **************************/
QList<int> numlist;
for(int i=1;i<10;i++)
numlist.insert(numlist.end(),i);
//1.只读访问 QList<int>::const_iterator
//2.读写访问 QList<int>::Iterator
QList<int>::Iterator it;
for(it=numlist.begin();it!=numlist.end();it++)
{
qDebug()<<*(it);
*it = (*it) *10;
}
QList<int>::const_iterator ci;
for(ci=numlist.cbegin();ci!=numlist.cend();ci++)
{
qDebug()<<*(ci);
//*ci = (*ci) *10; //error: assignment of read-only location
}
return 0;
}