liste mit zwei schleifen iterator problem



  • Hallo, ich habe eine liste die ich auf gleiche zahlen untersuchen will. doch leider habe ich da ein problem. Am besten ich schreibe mal kurz den code:

    for(std::list<zahlen>::iterator i=syszahlen.begin();i!=syszahlen.end();i++)
    {
       for(std::list<zahlen>::iterator j=i+1;j!=syszahlen.end();j++)
       {
                    tue etwas............
       }
    }
    

    Ich bekomme immer einen fehler weil ja der iterator j nicht so deklariert werden darf. Kann ich das irgendwie anders lösen. J soll immer eine position weiter sein als i. Ist das überhaupt machbar mit liste?



  • for(std::list<zahlen>::iterator i=syszahlen.begin();i!=syszahlen.end();++i)
    {
       std::list<zahlen>::iterator j = i;
       ++j;
       while (j != syszahlen.end())
       {
          tue etwas
          ++j;
       }
    }
    

    ]



  • Hallo, danke für die schnelle antwort doch leider will das programm nicht ganz. Ich bekomme immer einen adressfehler. Hier ist mein kompletter code:
    Vieleicht kann man mehr erkennen wo ich müll produziert habe:

    struct zahlen{
       int z1;
       int z2;
       int z3;
       int z4;
       int z5;
       int z6;
    }
    zahlen zln;
    
    std::list<zahlen> syszahlen;
    
    // zuerst lese ich zahlen ein und dann will ich sie halt analisieren wie untern dargestellt.
    
    int dreier;
    for(std::list<zahlen>::iterator i=syszahlen.begin();i!=syszahlen.end();++i)
    {
       std::list<zahlen>::iterator j=i;
       ++j;
       while(j!=syszahlen.end())
       {
          dreier=0;
          if(i->z1==j->z1 || i->z1==j->z2 ||
             i->z1==j->z3 || i->z1==j->z4 ||
             i->z1==j->z5 || i->z1==j->z6
            ) dreier++;
    
          if(i->z2==j->z1 || i->z2==j->z2 ||
             i->z2==j->z3 || i->z2==j->z4 ||
             i->z2==j->z5 || i->z2==j->z6
            ) dreier++;
    
          if(i->z3==j->z1 || i->z3==j->z2 ||
             i->z3==j->z3 || i->z3==j->z4 ||
             i->z3==j->z5 || i->z3==j->z6
            ) dreier++;
    
          if(i->z4==j->z1 || i->z4==j->z2 ||
             i->z4==j->z3 || i->z4==j->z4 ||
             i->z4==j->z5 || i->z4==j->z6
            ) dreier++;
    
          if(i->z5==j->z1 || i->z5==j->z2 ||
             i->z5==j->z3 || i->z5==j->z4 ||
             i->z5==j->z5 || i->z5==j->z6
            ) dreier++;
    
          if(i->z6==j->z1 || i->z6==j->z2 ||
             i->z6==j->z3 || i->z6==j->z4 ||
             i->z6==j->z5 || i->z6==j->z6
            ) dreier++;
    
          if(dreier>=FormHauptmenu->optimierung)
             j=syszahlen.erase(j);
    
          ++j;
        }    
    
    }
    


  • hallo, hat sich erledigt. außerdem kommt bei mir die liste nicht mehr in frage da ich unbedingt auch in beliebige stellen springen muß. und da ist eine liste nicht für geeignet. ich bleibe doch beim vector.


Log in to reply