vector iterator



  • Hallo,

    ich habe folgende Frage:

    Ich habe einen vector gegeben und möchte jeweils immer zwei Werte miteinander vergleichen.

    Also:
    (0,1)...(0,n)
    dann
    (1,2)...(1,n)
    ...
    (n-1,n)

    Wie definiere ich nun die for Bedingung der Schleife mit Hilfe von Iteratoren damit das erfüllt ist?

    Ich hatte sowas versucht, aber da läuft er alle möglichen Kombinationen durch,dass würde ich gerne vermeiden.

    for(vector<double>::iterator iv = xDirVec.begin(), vector<double>::iterator ivv = iv+1; iv!= xDirVec.end()-1; iv++, ivv++, ivv%=xDirVec.end())
    


  • Hi,

    for(vec_iter it = vec.begin(); it != vec.end(); ++it)
        for(vec_iter it2 = it+1; it2 != vec.end(); ++it2) ...
    


  • Vielen Dank 🙂

    Aber mal eine andere Frage:

    Ich musste den vector jetzt durch eine Map ersetzen:

    for(map<pair<double,QString>,pair<double,double>>::iterator xFirst = xDirMap.begin(); xFirst!= xDirMap.end()-1; xFirst++)
    	{
    		for(map<pair<double,QString>,pair<double,double>>::iterator xSecond = xFirst+1; xSecond != xDirMap.end(); xSecond++)
    		{...
    

    Das -1/+1 mag er nicht.

    Wie kann ich dem Compiler sagen, er soll in der ersten Schleife beim vorletzten Eintrag aufhören und in der zweiten Schleife eine Position nach dem Iterator aus der ersten Schleife starten?



  • Bidirektionale Iteratoren, wie sie in assoziativen Containern vorliegen, unterstützen die arithmetischen Operatoren +, - (und folglich auch +=, -=) nicht. Sie können nur inkrementiert oder dekrementiert werden (++, --). Alternativ kann man z.B. std::advance einsetzen, um manuell zu verschieben.



  • Vielen Dank für den Tip.

    Die Schwierigkeit eine Postion nach dem ersten Iterator zu starten hab ich somit gelöst:

    advance(xSecond,distance(xFirst,xDirMap.begin())+1);
    

    Aber wie kann ich erreichen das die erste Schleife beim vorletzten Eintrag terminiert?



  • Ok, Problem gerade gelöst 😉



  • Vlt noch ne Anschlussfrage:

    Wie kann ich eine Map, nach einem meiner beiden Keys sortieren lassen, in dem Fall dem double wert?

    map<pair<double,QString>,pair<double,double>>
    

    Mit vectoren ging es mit sort



  • rafilis1982 schrieb:

    Wie kann ich eine Map, nach einem meiner beiden Keys sortieren lassen, in dem Fall dem double wert?

    Du solltest dir vielleicht noch einmal genauer ansehen, was eine Map ist. Diese ist nämlich ständig sortiert, und zwar immer nach dem Key. Die Sortierbedingung kann man zusätzlich als Funktor angeben, ansonsten wird auf den operator< zurückgegriffen.


Anmelden zum Antworten