den größten wert eines arrays ermitteln?



  • Um der Nekrophilie mal eine Rechtfertigung zu geben. Wenn jemand einen 13 Jahre alten Thread ausgräbt muss es ja ein dringendes Problem sein.

    #include <algorithm>
    
    // manuell
    int find_max( int *a, size_t c ) 
    {
       assert( a && c > 0 );
    
       int max = *a;
       for( size_t i = 1; i < c; ++i, ++a ) if( *a > max ) max = *a;
       return max;
    }
    
    // STL way
    int find_max( int *a, size_t c )
    {
       assert( a && c > 0 ); 
       return *std::max_element( a, a + c );
    }
    


  • //STL-like way:
    
    #include <cassert>
    #include <iterator>
    
    template <class InputIt, class T = typename std::iterator_traits< InputIt >::value_type >
    T max( InputIt first, InputIt last )
    {
    	assert( first != last );
    
    	T max = *first;
    
    	for( auto i = first; i != last; ++i )
    		if( *i > max )
    			max = *i;
    
    	return max;
    }
    


  • Dasd schrieb:

    Hast du das überhaupt getestet?

    Ja.

    Bist du sicher, dass es funktioniert, wenn du in der Schleife dem Maximalwert einen Index zuweist? (Gilt für die vector-Variante genauso.)

    Ja. Denn das war die Anforderung im Eingangs-Post:

    Franz schrieb:

    [...] also welches array teil dem größten wert hat



  • heini schrieb:

    Dasd schrieb:

    Bist du sicher, dass es funktioniert, wenn du in der Schleife dem Maximalwert einen Index zuweist? [...]

    Ja. [...]

    heini schrieb:

    // ...
    
        for(int i=0;i<c;i++) if(a[i]>max) max=i;
    
    // ...
    
        for(int i=0;i<a.size();i++) if(a[i]>max) max=i;
    
    // ...
    

    Darüber denkst jetzt bitte nochmal gaaaanz scharf nach.



  • Und als Gedankenstütze: http://ideone.com/UVKe17



  • Dasd schrieb:

    Und als Gedankenstütze: http://ideone.com/UVKe17

    Joa, dein Kommentar am Ende des Codes ist interessant. Du meinst das richtige, schreibst aber das falsche. -> Index ist 6 und nicht 5, da an Index 6 der Wert 63 steht.



  • inflames2k schrieb:

    Dasd schrieb:

    Und als Gedankenstütze: http://ideone.com/UVKe17

    Joa, dein Kommentar am Ende des Codes ist interessant. Du meinst das richtige, schreibst aber das falsche. -> Index ist 6 und nicht 5, da an Index 6 der Wert 63 steht.

    Ähmm... Nein? Das ist der Originalcode samt Kommentare von Heini. Das soll nur nochmal verdeutlichen, dass sein Algorithmus nicht passt. Der Wert 63 steht nämlich nicht an Index 6. 😉



  • Dasd schrieb:

    Ähmm... Nein? Das ist der Originalcode samt Kommentare von Heini. Das soll nur nochmal verdeutlichen, dass sein Algorithmus nicht passt. Der Wert 63 steht nämlich nicht an Index 6. 😉

    Woah, hast recht. - Habe das "Reserve" aus irgendeinem Grund als "push_back" gelesen.

    Hallo Heini,

    falls du deinen Fehler wirklich nicht siehst. - Du vergleichst die Werte des Vektors mit dem zuletzt gelesenen Index. - Da alle Werte > 7 sind ist der Index folglich der des letzten Elements.

    Korrekt wäre also wenn du dir den Wert des größten Elements und den Index merkst und auch auf den Wert des bisher größten Elements prüfst.



  • inflames2k schrieb:

    Korrekt wäre also wenn du dir den Wert des größten Elements und den Index merkst und auch auf den Wert des bisher größten Elements prüfst.

    dub di dub.

    max = 0;
         for(int i=0;i<c;i++) if(a[i]>a[max]) max=i;
    


  • Ist doch das gleiche nur in kürzer. 🤡



  • Swordfish schrieb:

    dub di dub.

    max = 0;
         for(int i=0;i<c;i++) if(a[i]>a[max]) max=i;
    

    Und das Problem ist auch nicht unbedingt Raketenwissenschaft.


Anmelden zum Antworten