anfängerprobleme mit for-schleife



  • hi,
    ich muss den pc beeinflussen, kriege aber folgenden fehler:

    for (vector<string>::iterator pc = filetext.begin();pc != filetext.end();++pc){
        ...
        if (...) pc=3 ;
    }
    
    " |293|error: no match for 'operator=' in 'pc = 3' "
    

    danke schonma!



  • kens schrieb:

    hi,
    ich muss den pc beeinflussen, kriege aber folgenden fehler:

    for (vector<string>::iterator pc = filetext.begin();pc != filetext.end();++pc){
        ...
        if (...) pc=3 ;
    }
    
    " |293|error: no match for 'operator=' in 'pc = 3' "
    

    danke schonma!

    Wenn Du bei if(condition) den iterator auf das dritte Element setzen willst, dann so:

    pc = filetext.begin() + 3;
    

    Wenn nicht, dann musst Du mal erklären, was genau Du willst.



  • ahh der compiler frisst es schonmal, ich verstehe aber nicht wo jetzt der untschied ist, und warum ich mir den pc nicht mit cout ausgeben lassen kann, denn ganz so wie es klappen soll funzt es nicht:
    die for schleife springt nicht zurück, sondern überspringt 3 zeilen(=strings).



  • kens schrieb:

    ahh der compiler frisst es schonmal, ich verstehe aber nicht wo jetzt der untschied ist, und warum ich mir den pc nicht mit cout ausgeben lassen kann, denn ganz so wie es klappen soll funzt es nicht:
    die for schleife springt nicht zurück, sondern überspringt 3 zeilen(=strings).

    Lies mal diesen Artikel. Da wird erklärt, was es mit den Iteratoren genau auf sich hat.



  • hmm jezz bin ich schlauer, aber ich verstehe nicht wo der unterschied von dem iterator und einer normalen int zahl ist, denn ich würde mir die auch gerne ausgeben lassen.

    außerdem versteh ich einfach nicht warum der 3 zeilen weiter geht, statt ca. 10 zurück... wie kann ich mir pc ausgeben lassen damit ich schlauer werde?



  • kens schrieb:

    ich verstehe nicht wo der unterschied von dem iterator und einer normalen int zahl ist

    Ein Iterator ist eine Klasse (std::iterator selbst eig. eine Basisklasse für typedefs), die abstraktes Iterieren von Containern jeglicher Art ermöglicht und ist im Wesentlichen ein Wrapper für Zeiger. Sie bietet mit den überladenen inkre (und, aber nicht benötigt: /dekre) ment und Dereferenz Operatoren zugriff auf jede Art von Container, sei es std::(basic_)string, std::vector, ...

    Zum Beispiel würde der interne Zeiger eines std::vector<int>::iterator

    einfach inkrementiert werden, wenn der Iterator inkrementiert wird.
    In std::list<int>::iterator würde stattdessen der Zeiger seinem (selbst darauf gezeigten) nächsten Knoten zugeordnet.

    Ein int ist einfach ein implementierter, integraler Datentyp von C++.


Anmelden zum Antworten