Summe zweier vector Container



  • Jetzt bin weiter gekommen dank eure Hilfe. Und so ist die Aufgabe gelöst.



  • otze schrieb:

    *Seufz*

    @inter2k3 und was hat er jetzt daraus gelernt? Könnte er jetzt die nächste Aufgabe aus dem Buch besser lösen?

    Hoffentlich, dass es für jedes Problem mehrere Lösungen gibt (auch wenn ich nur zwei präsentiert habe).
    Ausserdem war offensichtlich, dass er aufgrund der beschränkten Deutschkenntnisse die Aufgabe nicht richtig verstanden hat. Meine Hoffnung war, dass dies aus dem code (vorallem dem zweiten Beispiel) hervorgeht, was gefordert war.
    Dass die absoluten Grundlagenkenntnisse (z.b. for-schleife) noch nicht fundiert sind konnte ich ja nicht ahnen.
    Du erklärst die Funktionsweise der For-Schleife ja auch anhand von code 😃



  • Das mit dem schleifen kenne ich schon, aber mich hat nur eins verwirrt das ich noch sowas nicht gesehen habe. Und zwar das:

    for (int i = 0; i!= weight.size(); ++i)
    

    Aber so etwas kenne ich schon:

    for (int i = 0; i<= weight.size(); ++i)
    


  • #include <vector>
    #include <iostream>
    
    int main()
    {
    	std::vector<double> vec;
    
    	vec.push_back(10);
    	vec.push_back(15);
    	vec.push_back(20);
    
    	std::cout << "for (int i = 0; i < vec.size(); ++i)" << std::endl;
    
    	for (int i = 0; i < vec.size(); ++i)
    	{
    		std::cout << vec[i] << std::endl;
    	}
    
    	std::cout << "\nfor (int i = 0; i <= vec.size() - 1; ++i)" << std::endl;
    
    	for (int i = 0; i <= vec.size() - 1; ++i)
    	{
    		std::cout << vec[i] << std::endl;
    	}
    
    	std::cout << "\nfor (int i = 0; i != vec.size(); ++i)" << std::endl;
    
    	for (int i = 0; i != vec.size(); ++i)
    	{
    		std::cout << vec[i] << std::endl;
    	}
    
    	return 0;
    }
    

    Alle 3 Schleifen tun das gleiche. Es ist nur eine unterschiedliche Formulierung.

    Ich würde aber zur ersten Variante raten.

    for (int i = 0; i < vec.size(); ++i)
    	{
    		std::cout << vec[i] << std::endl;
    	}
    

    Die zweite Variante ist unnötig kompliziert:

    for (int i = 0; i <= vec.size() - 1; ++i)
    	{
    		std::cout << vec[i] << std::endl;
    	}
    

    Und die dritte Variante empfinde ich als unschön. Ich vergleiche nur bei Iteratoren auf ungleich.



  • Jetzt ist alles klar, und dank eure Hilfe hab ich wieder was gelernt.



  • Winux um das nochmal zu betonen.

    In C++ werden Intervalle (ranges) immer als Halboffen [begin, end) angegeben.
    Das bedeutet, das begin noch dazugehört und end nicht.

    Deswegen sind

    for (int i = 0; i<= weight.size(); ++i)
    

    und

    for (int i = 0; i != weight.size(); ++i)
    

    nicht das selbe! Die Merkregel ist: bei 5 Durchläufen bei 0 anfangen und
    auf i != 5 oder auf i < 5 testen. Und am besten in eigenem Code
    das immer ganz genauso machen. Dann muss man nämlich nicht jedes mal überlegen.


Anmelden zum Antworten