kostenloser Webspace werbefrei: lima-city


iteratoren verstehen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    g****e

    heyho, ich hab mal ne frage:
    ich komme aus der PHP entwicklung, wenn jemand eine Idee hat wie ich es mit einem solchen beispiel verstehen kann nur her damit, ich will das lernen.

    ich gehe jetzt mal vom beispiel aus, ich erzeuge einen Vector. irgendwie so :
    vector <int> my_vector;


    (wenn ihr codefehler findet sofort sagen! ich bin neu im C++ und möchte wenn schon dann direkt auf die finger bekommen, damit ich aus den fehlern lerne)

    so, jetzt möcht ich das am liebsten durchgehen. meine lieblingsmethode wäre es wie ein array zu behandeln:
    for ( int i = 0; i < 10; i++ ) {
        cout<<my_vector[ i ];
    }


    würde das gehen (sofern das ganze 10 daten enthält, gehen wir mal davon aus ich hab die zahlen von 0 - 9 in den vector geschrieben)?

    jetzt hab ich gelesen, wenn ichs variabel betrachten will, dann soll ich das irgendwie so machen:

    vector <int>::iterator my_vector_it;
    for ( my_vector_it = my_vector.begin() ; my_vector_it != my_vector.end() ; my_vector_it++ ) {
        cout<<my_vector[ my_vector_it ];
    }


    aber was mach ich da überhaupt? ist der iterator also sowas wie nen handler bei PHP (File mit fopen( 'file.txt' , 'r' ); , und dann der zurückgegebene händler) ? und würde das erste auch gehen? oder müsst ich dann das ganze mapen mit:

    map <int, int> my_map;
    //map mit den zahlen von 0-9 füllen
    for ( int i = 0 ; i < 10 ; i++ ) {
         cout<<my_map[ i ];
    }


    ich verstehe einfach nicht so ganz was der iterator nun so genau ist und komme mit dem von google ausgespucktem zu keinem zufriedenstellenden ergebnis. wäre super wenn ihr mir dashier mal komentieren könntet, ob das geht, und was der teil mit dem iterator überhaupt macht. ich hab da echt wenig peilung :-S
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ein Iterator dient dazu eine Sequenz von Werten zu produzieren. Diese Sequenz von Werten kann z.B. aus eimen STL-Vektor (wie in deinem Beispiel) stammen. Iteratoren sind häufig eine sichere (=weniger fehleranfällige) Variante als Pointer-Arithmetik um über Wertesequenzen zu iterieren.

    Jedenfalls ist ein Iterator ein universelles Konzept. Du kannst z.B. einen Iterator haben, der dir alle Zahlen von 0 bis ∞ liefert, aber auch einen Iterator, der dir alle Elemente aus einem Array nennt.

    Ein zentrales Konzept bei Iteratoren sind Increment- und Decrement. Also ++ und --. Hierbei handelt es sich um überladene Operatoren (falls du das jetzt nicht verstehst: Nicht so wild). Mit ihnen kannst du steuern, welcher Wert in dem Iterator zum Abruf "abgelegt" werden soll.

    Jedenfalls benutzt man Iteratoren so:

    #include <iostream>
    #include <vector>
    
    int main( int argc, char ** argv ) {
    	std::vector<int> vec;
    	for( int i = 0; i < 10; i++ ) {
    		vec.push_back( i*i );
    	}
    
    	std::vector<int>::iterator iter;
    	for( iter = vec.begin(); iter != vec.end(); iter++ ) {
    		std::cout << *iter << "\n";
    	}
    	return 0;
    }

    Also nutzt man den Iterator iter wie einen Zeiger, indem man den Wert des Iterators mit dem *-Operator abfragt. In PHP gibt es sowas wie Zeiger jedoch nicht und dieses Konzept findet man eingentlich auch nur in Sprachen wie C/C++/D wobei C++ und D Alternativen zu Zeigern anbieten, da Zeiger eine beliebte Fehlerquelle sind.


    Und wenn du aus der PHP-Entwicklung kommst, empfehle ich dir dich erstmal an C heranzuwagen, bevor du C++ lernst, weil C++ eine sehr komplexe Sprache ist in die man nicht so leicht hineinfindet. C hingegen ist eine sehr übersichtliche Sprache und gerade wenn du aus der PHP-Welt kommst, wirst du dich dort halbwegs schnell zurechtfinden.

    Und wenn du dann irgendwann C kannst, wirst du dich dann auch leichter in C++ einfinden können.

    Und dann ist da natürlich noch D, was zwar bei weitem nicht so verbreitet ist wie C++, aber was ich als gute, sauberere und leichtere Alternative zu C++ ansehe. Du kannst nach C dann ja D lernen.

    Beitrag zuletzt geändert: 12.1.2011 13:34:18 von bladehunter
  4. Autor dieses Themas

    g****e

    das ist ne super erklärung! hast du ne eigene page auf der du zufällig tutorials für sowas hast?^^ ne schöne erklärung =)

    also ist ein iterator quasi ein zeiger der durch die elemente durch wandert, und in dem iterator ist dann der wert dessen auf was er gerade zeigt, oder? und bei ner map könnt ich dann per iter.first und iter.second drauf zugreifen? also sind die garnicht so schwer =) und mit ++ und -- geh ich dann zum nächsten oder vorherigen element.

    ich hab die grundlagen von C++ schon ne weile gelernt, ich fand, ganz ehrlich, C schwerer als C++ vom grundsyntax bzw den grundfunktionen. aber danke für den tipp =)

    und zeiger in PHP: ganz PHP besteht aus zeigern^^ das $ ist nichts anderes als ein *. folglich ist $pointer das gleiche wie *pointer. besonderheit der php variablen sind aber dass es void zeiger sind. darum benötigen wir auch keine typisierung. die speicherverwaltung wird zudem von einem integrierten system übernommen und man kann leider keinen einfluss drauf nehmen, oder nur wenig.

    D sehe ich persönlich als königssprache: ich verstehe den syntax nur halb und finde C++ leichter zu erlernen. am schönsten wäre ja wenn man PHP einfach kompilieren könnte^^

    danke für die ausführliche antwort =) ich glaube nu hab ich die iteratoren verstanden. ich werd damit mal einige tests durchführen wie ich sie so nutzen kann. danke =)
  5. ggamee schrieb: das ist ne super erklärung! hast du ne eigene page auf der du zufällig tutorials für sowas hast?^^ ne schöne erklärung =)

    Jein. Ich habe zwar ein selbstgeschriebenes Lua Tutorial für absolute Programmieranfänger geschrieben, aber da mir ansonsten einfach die Zeit dafür fehlt, gehe ich lieber auf konkrete Fragestellungen ein, von denen ich weiß, dass ein Klärungsbedarf besteht.


    also ist ein iterator quasi ein zeiger der durch die elemente durch wandert, und in dem iterator ist dann der wert dessen auf was er gerade zeigt, oder?

    Richtig. Das ist der häufigste Einsatzzweck. Aber wie gesagt: Du kannst auch einfach einen Iterator haben, der dir die Zahlen von 0 bis ∞ liefert, ohne dass da jetzt ein Array mit den Zahlen von 0 bis ∞ dahintersteht.


    und bei ner map könnt ich dann per iter.first und iter.second drauf zugreifen? also sind die garnicht so schwer =) und mit ++ und -- geh ich dann zum nächsten oder vorherigen element.

    Richtig. Die Elemente in einer STL-Map bestehen aus 2 Komponenten. Dem Schlüssel (Zugriff mit iter->first) und dem Wert (Zugriff mit iter->second).


    ich hab die grundlagen von C++ schon ne weile gelernt, ich fand, ganz ehrlich, C schwerer als C++ vom grundsyntax bzw den grundfunktionen. aber danke für den tipp =)

    Es kommt natürlich drauf an, wo du lernst. Ein empfehlenswertes C Tutorial findest du hier.


    und zeiger in PHP: ganz PHP besteht aus zeigern^^ das $ ist nichts anderes als ein *.

    Nein. PHP kennt keine Zeiger. Auch intern nicht. PHP kennt aber Referenzen. Trotzdem werden die meisten Variablen direkt auf dem Stack abgelegt und sind direkt abrufbar. Bloß bei Objekten wird auf den Heap zurückgegriffen und auch dort werden außschließlich Referenzen eingesetzt.


    D sehe ich persönlich als königssprache: ich verstehe den syntax nur halb und finde C++ leichter zu erlernen.

    Ich werde dich sicherlich nicht aufhalten, wenn dir C++ mehr zusagt.

    am schönsten wäre ja wenn man PHP einfach kompilieren könnte^^

    Das kann man. Allerdings braucht man dafür einen kostenpflichtigen Compiler von Zend.

    Beitrag zuletzt geändert: 12.1.2011 16:35:00 von bladehunter
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!