您的位置:

Qt foreach用法详解

一、foreach概述

Qt的foreach是一个非常方便且易于使用的迭代器。它能够迭代遍历一个集合中的所有元素,无需我们手动指定迭代器的起始位置和终止位置,也无需编写while循环。Qt foreach语法与Java foreach语法非常相似,可以很容易地上手使用。

    QList list;
    list.append("John");
    list.append("Frank");
    list.append("Amy");

    foreach(QString str, list)
    {
        qDebug()<
   


    

二、foreach遍历数组

在C++中,数组也可以看做是一种集合。那么,我们可以使用Qt foreach遍历数组,代码简单直接。

    int arr[5] = {1, 2, 3, 4, 5};
    foreach(int i, arr)
    {
        qDebug()<


      

三、foreach遍历QString

QString是Qt中经常使用的字符串类型,我们也可以使用Qt foreach遍历QString中的每个字符。

    QString str = "Hello Qt";
    foreach(QChar c, str)
    {
        qDebug()<


        

四、foreach遍历QList和QVector

QList和QVector是Qt常用的两种容器类型,它们都可以使用Qt foreach进行遍历。

    QList list;
    list<<1<<2<<3;

    foreach(int i, list)
    {
        qDebug()<
           vec;
    vec<<"John"<<"Frank"<<"Amy";

    foreach(QString str, vec)
    {
        qDebug()<
           


            

五、在foreach中修改容器元素

有时候,我们需要在foreach中对容器的元素进行修改。由于foreach是使用值拷贝迭代容器的元素的,修改容器元素会发生无法预料的行为。为了避免这种情况,我们可以使用引用来遍历容器。

    QList list;
    list<<1<<2<<3;

    foreach(int& i, list)
    {
        i++;
    }

    foreach(int i, list)
    {
        qDebug()<
              


               

六、倒序遍历容器元素

有时候,我们需要倒序遍历容器元素。通常的思路是先获取容器的长度,再从后向前遍历。这种方式虽然可行,但是代码冗长而且不够简洁。使用reverse_iterator迭代器进行倒序遍历是一个更好的选择。

    QList list;
    list<<1<<2<<3;

    QList
                 ::reverse_iterator i;
    for (i = list.rbegin(); i != list.rend(); ++i)
    {
        qDebug()<<*i;
    }

                 
                

七、foreach和lambda表达式

Qt foreach与lambda表达式结合使用,可以实现更加灵活的定制化需求。lambda表达式可以在foreach中进行过滤和映射等操作。

    QList list;
    list<<1<<2<<3<<4<<5;

    QVector
                  vec;
    QList
                  ::const_iterator iter = std::find_if(list.constBegin(), list.constEnd(), 
    [](int i){return i>3;});

    foreach(int i, iter, list.constEnd())
    {
        vec<
                   


                    

八、foreach和STL算法

Qt foreach能够与STL算法进行结合使用,能够更加高效地对容器中的元素进行操作。Qt提供了一个Q_FOREACH宏,使用它可以自动解析foreach语句中的集合类型,从而可以适用于不同类型的集合。

    #include 
    #include 
                      

    Q_FOREACH(int i, std::vector
                       {1, 2, 3, 4})
    {
        qDebug()<
                        {1, 2, 3, 4, 5})
    {
        if (i == 3)
        {
            break;
        }
        else
        {
            qDebug()<
                         


                          

九、总结

Qt foreach是一个非常便捷的迭代器,能够快速地遍历容器中的所有元素。它的语法简单直接,容易上手。使用Qt foreach能够大大简化代码,提高开发效率。