for-Schleifen Problem, mehrere Zähler



  • Müssen alle Zähler in einer for-Schleife vom gleichen Typ sein, oder warum geht das hier nicht?

    for(vector<int>::iterator iter = vec.begin(), size_t i = 0; iter != vec.end(); ++iter, ++i)
    {
        test[i] = *iter;
    }
    

    MfG
    Stromberg



  • for(vector<int>::iterator iter = vec.begin(); size_t i = 0 && iter != vec.end(); ++iter, ++i)
    {
        test[i] = *iter;
    }
    


  • Stromberg schrieb:

    Müssen alle Zähler in einer for-Schleife vom gleichen Typ sein, oder warum geht das hier nicht?

    Der Initialisierungsteil einer for-Schleife kann nicht aus mehreren Deklarationen oder Anweisungen bestehen. Wenn du also mehrere Zähler verwenden willst, kannst du davon nur einen im Initialisierungsteil einführen:

    size_t i = 0;
    for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter, ++i)
    {
        test[i] = *iter;
    }
    


  • Verstehe ich nicht, warum soll ich dass in den Bedingungsteil reinhaun? Dann heißt es doch jetzt: Solange "i" null ist, und iter nicht auf vec.end() zeigt, führe die Schleife aus!? Nach einem Schleifendruchlauf wärs ja dann schon vorbei, weil i dann 1 wäre?!
    Oder verstehe ich hier irgendwas falsch grad?

    MfG
    Stromberg

    EDIT: auf "helferlein" bezogen



  • Nachdem du eh das i brauchst, warum dann noch zusätzlich iteratoren nehmen? Vector hat Zugriff auf bestimmten index in konstanter Zeit, da hat ein iterator nicht so den Vorteil.

    for( int i=0; i<vec.size(); i++ ) {
        test[i] = vec[i];
    }
    


  • Bashar schrieb:

    Der Initialisierungsteil einer for-Schleife kann nicht aus mehreren Deklarationen oder Anweisungen bestehen. Wenn du also mehrere Zähler verwenden willst, kannst du davon nur einen im Initialisierungsteil einführen:

    Doch, aber nur mit dem gleichen Datentypen.



  • Gnah. Das sind dann mehrere Variablen in einer Deklaration :p



  • Bashar schrieb:

    Gnah. Das sind dann mehrere Variablen in einer Deklaration :p

    Mist..
    2 Deklaratoren deklarieren 2 Objekte in einer Deklaration.
    Schöner Merksatz.. 🙂



  • Äh, blöde Frage, aber ist eine Deklaration nicht immer etwas wie "extern int x" - wo kein Speicherplatz angefordert wird - und "int xx" eine Definition Verwechsel ich da was?

    MfG
    Stromberg



  • Stromberg schrieb:

    Äh, blöde Frage, aber ist eine Deklaration nicht immer etwas wie "extern int x" - wo kein Speicherplatz angefordert wird - und "int xx" eine Definition Verwechsel ich da was?

    MfG
    Stromberg

    Jup. Nur ist int xx; gleichzeitig eine Deklaration und eine Definition.
    Deklarieren heisst eigentlich nur den Namen in der Übersetzungseinheit bekannt machen.
    Allerdings gibt es noch z.B Klassen, wo du ebenfalls eine Deklaration haben kannst und eine Definition.

    class foo; //Deklaration
    class foo{}; // Definition
    

    Mit dem Speicher hat das da aber nichts zu tun.. Der wird erst angefordert,wenn du eine Instanz der Klasse erstellst.



  • jede defininition ist auch eine deklaration.



  • Wenn das i sowieso mitlaufen soll kann man es auch so erzeugen

    for(vector<int>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
    {
       size_t i = iter - vec.begin(); 
       test[i] = *iter;
    }
    

    Ist perfomancetechnisch aber sicher nicht der Hit.


Anmelden zum Antworten