beliebig viele parameter



  • danke,
    und sorry,
    das ichs nicht selbst gefunden habe,
    die frage war ja fast die selbe wie meine...

    sehe ich das richtig,
    das ich immer eine abbruchbedingung für meine arg_liste mit übergeben muß?
    also zB anzahl als ersten parameter, oder -1 als letzten wie im beispiel in der msdn?

    gibts vielleicht ein anderes makro,
    was mir das zählen abnimmt und dann als ersten parameter hinschreibt?
    sowas wie
    #define summe(...) = _summe(anzahl,...)

    hm



  • In C++ verwendet man das normalerweise nicht, da man damit das Typsystem aushebelt abgesehen davon kann man damit nur built-ins und PODs übergeben.



  • und wenn ich verspreche ganz brav zu sein?
    zb nur ints zu übergeben?



  • Wenn du nur ints übergeben willst, benutze einen int-Container.



  • haksi schrieb:

    #define summe(...) = _summe(anzahl,...)

    Hi,
    so wie ich das sehe willst du ne Summenfunktion programmieren, oder?
    Du weißt schon, dass (1+2+3+4+5) und ((((1+2)+3)+4)+5) das gleich is, oder?

    MfG

    Alexander Sulfrian



  • struct Summe
    {
    	Summe( double val = 0.0 )
    		: val( val )
    	{
    	}
    
    	Summe& operator+=( Summe other )
    	{
    		val += other.val;
    		return *this;
    	}
    
    	Summe operator+( Summe other )
    	{
    		return other += *this;
    	}
    
    	ostream& print( ostream& out )
    	{
    		return out << val;
    	}
    private:
    	double val;
    };
    
    Summe operator+( Summe lhs, Summe rhs )
    {
    	return lhs.operator+( rhs );
    }
    
    ostream& operator<<( ostream& out, Summe sum )
    {
    	return sum.print( out );
    }
    
    int main()
    {
    	Summe sum;
    	sum = 1 + 2 + 3 + 4 + Summe(2.3);
    	cout << sum;
    }
    


  • Ne große Anzahl an Zahlen hast du sowieso in irgendeiner Form von Sequenz gespeichert, also kannst du dir die Arbeit auch sparen:

    #include <numeric>
    #include <vector>
    
    int main()
    {
    	std::vector< int > ivec;
    	ivec.reserve( 10 );
    
    	for( int i = 0; i < 10; ++i )
    		ivec.push_back( i );
    
    	int summe = std::accumulate( ivec.begin(), ivec.end(), 0 );
    
    	cout << summe;
    }
    


  • accumulate ist in <algorithm>



  • leute vielen dank,
    für die hilfe zu summen,

    @Alexander Sulfrian
    ich weiß sogar,
    das 1+2+3+4+...+n = n*(n+1)/2 ist :p

    war aber nur das beispiel,
    mit dem ich gerade die sache mit va_start und Kollegen ausprobiert habe

    eigentlich wollte ich wissen,
    ob mir jemand das zählen der beliebig vielen Parameter (mit der offizielle Bezeichnung variablen Argumentliste) abnehmen kann 🙄

    hm



  • winheis schrieb:

    accumulate ist in <algorithm>

    Ne, ist in <numeric>, siehe Standard 26.4.1



  • @Any: Du hast Recht. In <numeric> sind accumulate, inner_product, adjacent_difference und partial_sum.
    @haksi: Es ist viel eleganter und performanter, Referenzen oder Zeiger auf Container zu übergeben.


Anmelden zum Antworten