iterator von Vektor als Rückgabewert



  • Hallo,

    ich hab in einer Klasse eine Funktion die mitm Sieb des Erathosthenes Primzahlen berechnet.
    Jetzt stellt sich mir natürlich die frage ob ich einen iterator auf den vector zurückgeben kann... wäre ja auch so ne feine sache um eine bestimmte position im vector zu behalten.

    und wie würde das aussehen? könnte mir da einfach jemand ganz kurz ne quellcode-skizze zu bauen?

    MfG
    Bara 🙂



  • Mitm Iterator ist das immer so eine Sache. Der ist nur gültig, solange man mitm Vector keine Einfügungen mehr macht. Ich fahre mitm int oder size_t da auch ganz gut.
    Allerdings kann ich mir nicht vorstellen, wo eine Funktion die mitm Sieb des Erathosthenes Primzahlen berechnet, sowas brauchen könnte.



  • beispiel:

    ich fülle erstmal meinen std::vector.
    in einer anderen funktion geh ich diesen vector ab (beispielsweise um eine primzahlzerlegung zu machen) und möchte dann den letzten primfaktor zurückgeben.
    da kann ich nen int zurückgeben oder auch einen iterator der auf diese stelle zeigt.

    mir gehts da auch eher um die machbarkeit.

    MfG



  • Das geht und ist ok.

    //Rückgabe: Iterator auf Primzahl, die den kleinsten Primfaktor von n darstellt, 
    //oder primzahlenliste.end(), wenn n eine Primzahl ist. 
    Vector<int>::iterator ersterPrimfaktor(int n){
       Vector<int>::iterator i=primzahlenliste.begin();
       for(;i!=primzahlenliste.end();++i)
          if(n%*i==0 && n>*i)
             break;
       return i;
    }
    


  • hättest du da evtl auch nen kleines bisserl code für mich?

    ich stell mir das so vor:

    void Class::takeIT()
    {
    ...
      std::vector<int>::iterator it;
      it = putIT();
      ...
    }
    
    Iterator Class::putIT()
    {
      std::vector<int>::iterator it;
      it=myVector.begin();
      return it;
    }
    

    ?

    MfG



  • Na, der Rückgabetyp ist dir doch schon bekannt:

    void Class::takeIT()
    {
    ...
      std::vector<int>::iterator it;
      it = putIT();
      ...
    }
    
    std::vector<int>::iterator Class::putIT()
    {
      std::vector<int>::iterator it;
      it=myVector.begin();
      return it;
    }
    

    Warum gehst du so verschwenderich mit Initialisierungen um?

    void Class::takeIT()
    {
    ...
      std::vector<int>::iterator it = putIT();
      ...
    }
    
    std::vector<int>::iterator Class::putIT()
    {
      std::vector<int>::iterator it =myVector.begin();
      return it;
    }
    

Anmelden zum Antworten