eher < oder !=



  • Ich habe nun schon seit einiger Zeit ne Debatte am laufen.
    Es geht darum welche bedingung günstiger ist in einer for schleife: != oder <

    z.b. for(int i = 0; i != vec.size(); i++)
    oder halt for(int i = 0; i < vec.size(); i++)

    mal ungeachtet dessen das man hier mit vector iteratoren arbeiten sollte (oder?) welche version würdet ihr wählen?



  • != weil überladene Iteratoren immer != mindestens so schnell wie < können.
    Denk an eine verkettet Liste, da muß < echt finden, ob ein Node vor dem anderen ist, dazu muß man schlimmstenfalls durch die gante Liste laufen. Aber != ist quasi geschenkt.



  • das heißt? Ich bin erst im Kapitel von Listen, mit verketteten Listen habe ich mich noch nicht beschäftigt, kannst du das bitte ein wenig umschreiben?



  • Dafür muss sichergestellt sein, dass i nicht auch noch an einer anderen Stelle verändert wird, bzw. dass der Vergleich immer funktioniert (mögliche Ungenauigkeit beachten),...
    Sonst endet es in einer Endlosschleife 🙂



  • das heißt, dass es:

    - bei ganzzahltypen egal ist, was du nimmst
    - bei gleitkommazahlen != nicht wirklich sinnvoll ist
    - bei iteratoren != niemals langsamer ist als <
    - und vor allem: du kannst sicher sein, dass jeder iterator einen !=-operator besitzt

    bb



  • volkard schrieb:

    != weil überladene Iteratoren immer != mindestens so schnell wie < können.
    Denk an eine verkettet Liste, da muß < echt finden, ob ein Node vor dem anderen ist, dazu muß man schlimmstenfalls durch die gante Liste laufen. Aber != ist quasi geschenkt.

    Weil der Name "vec" ja auf ne Liste hinweist. 🙄

    std::vector<int> vec(2);
    	for(int i = 0; i != vec.size(); i++)
    		if ( i == vec.size()-1 ) vec.pop_back();
    


  • oO das heißt?



  • Das heißt:

    (1) != funktioniert immer, < funktioniert nur meistens
    (2) != ist nie langsamer als <, manchmal schneller

    ➡ Wir gewöhnen es uns an, standardmäßig != zu verwenden.



  • Jud4s schrieb:

    oO das heißt?

    Wenn man immer != statt < nimmt, muß man nie mehr nachdenken, welchen COntainer man gerade benutzt. Ich treibe es so weit, daß ich auch bei int immer != nehme und gar nicht mehr nachdenke. Nachdenken ist doof.



  • volkard schrieb:

    Nachdenken ist doof.

    🙂 👍



  • volkard schrieb:

    Nachdenken ist doof.

    btw: Ich empfehle das Kabarett-Programm "Nachdenken lohnt sich" von Vince Ebert.


Anmelden zum Antworten