Qt学习笔记1 对容器类QList QLinkedList QVector的遍历

对容器类QList QLinkedList QVector的遍历

目录

0.QList QLinkedList QVector容器的时间复杂度比较

1

1.Java风格的迭代器

Java风格的迭代器的迭代点位于列表项的中间,而不是直接指向某个列表项。因此他的迭代点或者在第一个列表项的前面,或者在两个列表项之间,或者在最后一个列表项的后面。
对于每一个容器,Qt都提供了两种类型的Java风格迭代器数据类型:一种提供只读访问 一种提供读写访问

toFront(): 将迭代点移动到列表的前端(第一个列表项的前面)
peekNext():返回下一个列表项不移动迭代点
peekPrevious():返回前一个列表项不一定迭代点
findNext():从当前迭代点开始,向后查找指定的列表项。找到返回TRUE,此时迭代点位于匹配列表项的后面;否则返回false,迭代点位于最后一个列表项的后面
findPrevious():从当前迭代点开始,向前查找指定的列表项。找到返回TRUE,此时迭代点位于匹配列表项的前面;否则返回false,迭代点位于第一个列表项的前面
2

2.STL风格的迭代器

STL风格的迭代器的迭代点直接指向列表项。对于每一个容器,Qt都提供了两种类型的Java风格迭代器数据类型:一种提供只读访问 一种提供读写访问

QList::begin()函数:返回指向第一个列表项的迭代器
QList::end()函数:返回一个容器最后列表项之后的虚拟列表项,标记为无效位置的迭代器,用于判断是否到达容器的底部。
3


/*
 * 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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Erice_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值