Qt CPP 简化for循环代码, 将for简化成while


                  if(QString::compare(tagname, "g", Qt::CaseInsensitive) == 0) { // group
                    QDomNodeList list = e.childNodes();   // 遍历群组中所有标签
                    for(int i=0; i<list.count(); i++)
                    {
                        QDomNode n=list.at(i);

                        if(QString::compare(n.nodeName(), "g", Qt::CaseInsensitive) == 0) { // group
                            QDomNodeList list1 = n.childNodes();   // 遍历群组中所有标签
                            for(int i1=0; i1<list1.count(); i1++)
                            {
                                QDomNode n1=list1.at(i1);
                                if(QString::compare(n1.nodeName(), "g", Qt::CaseInsensitive) == 0) { // group
                                    QDomNodeList list2 = n1.childNodes();   // 遍历群组中所有标签
                                    for(int i2=0; i2<list2.count(); i2++)
                                    {
                                        QDomNode n2=list2.at(i2);
                                        qout << n2.nodeName();
                                        parseSVGTag(n2.toElement(), n2.nodeName());
                                    }
                                } else {
                                    qout << n1.nodeName();
                                    parseSVGTag(n1.toElement(), n1.nodeName());
                                }
                            }
                        } else {
                            qout << n.nodeName();
                            parseSVGTag(n.toElement(), n.nodeName());
                        }
                    }
                } else {
                    qout << tagname;
                    parseSVGTag(e, tagname);
                }

如何用while循环简化代码?

此段代码的作用是碰到group标签就打开遍历

while循环和for循环是一样的,经过测试,while循环反而比for循环更慢。因此,你的问题应该是优化你的逻辑,而不是用while循环简化你的代码。


 if(QString::compare(tagname, "g", Qt::CaseInsensitive) == 0)
    { // group
        QDomNodeList list = e.childNodes();   // 遍历群组中所有标签

        int i=0;
        while (i<list.count())
        {
            QDomNode n=list.at(i);
            if(QString::compare(n.nodeName(), "g", Qt::CaseInsensitive) == 0)
            { // group
                QDomNodeList list1 = n.childNodes();   // 遍历群组中所有标签
                int j=0;
                while (j<list1.count())
                {
                    QDomNode n1=list1.at(i1);
                    if(QString::compare(n1.nodeName(), "g", Qt::CaseInsensitive) == 0) { // group
                        QDomNodeList list2 = n1.childNodes();   // 遍历群组中所有标签
                        for(int i2=0; i2<list2.count(); i2++)
                        {
                            QDomNode n2=list2.at(i2);
                            qout << n2.nodeName();
                            parseSVGTag(n2.toElement(), n2.nodeName());
                        }
                    } else {
                        qout << n1.nodeName();
                        parseSVGTag(n1.toElement(), n1.nodeName());
                    }
                    j++;
                }
            } else {
                qout << n.nodeName();
                parseSVGTag(n.toElement(), n.nodeName());
            }
            i++;
        }
    } else {
        qout << tagname;
        parseSVGTag(e, tagname);
    }