funktion für standardabweichung



  • Hallo,

    ich wollte gerade eine Funktion zur Berechnung zur Berechnung von Mittelwerten schreiben und kam zum folgenden code:

    template<typename T> 
    double mean( const &T container ) throw( IllegalArgumentException )
    {
    	const std::size_t n = container.size();
    
    	if( n )
    	{
    		return std::accumulate( container.begin(), container.end(), 0.0 ) / n;
    	}
    
    	throw IllegalArgumentException("Container size should not be zero.");
    }
    

    Wenn ich jetzt:

    std::vector<double> tmp;
    
    for( int i = 0 ; i < 10 ; i++ )
    {
    	tmp.push_back( i * 1.0 );
    }
    
    const double meanval = mean<std::vector<double>>( tmp );
    

    Dann bekomme ich einiges an Fehlern:

    Error	1	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int.
    Error	6	error C2664: 'mean' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const int &'
    

    Was mache ich da falsch?



  • const &T => const T&



  • Was soll dieser Thread-Titel?



  • 1.) Exceptionspezifikationen sind sowas von out.
    2.) Es gibt schon eine invalid_argument exception.
    3.) Wo kommt denn die Standardabweichung vor und was hat sie mit deinem Fehler zu tun?



  • Vielleicht meint er ja eine Abweichung vom (C++)-Standard^^



  • 4.) wieso schmeisst die Funktion immer. hoppla ...



  • Bei Funktionstemplates musst du das Templateargument nicht explizit angeben, wenn es aus den Typen der Funktionsargumente hergeleitet werden kann.

    Und Exception-Spezifikationen sind deprecated, sie werden nicht mal vernünftig von Compilern unterstützt. Eine Alternative für Logikfehler wäre zum Beispiel assert .



  • Dank an alle für die Hilfe!

    Habt recht, es ist keine Standardabweichung. Habe mit mehr Code angefangen, reduzierte es dann um Lesezeit einzusparen.. daher hat mir der Mittelwert gelangt.

    Da die Exceptionspezifikation throw( IllegalArgumentException ) deprecated ist, muss es doch irgend eine andere Möglichkeit geben festzustellen ob die Funktioni eine Exception schmeissen kann oder nicht?


Anmelden zum Antworten