beliebig viele parameter
-
Kann mir jemand erklären,
wie ich beliebig viele parameter an eine sub übergeben kann?wie zB. beim
printf( formattext, param1, param2, ... );haksi
-
sub? lol
-
Schau mal bei va_start und Kollegen nach, die kümmern sich um die Verarbeitung einer variablen Argumentliste (so die offizielle Bezeichnung für "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 :pwar aber nur das beispiel,
mit dem ich gerade die sache mit va_start und Kollegen ausprobiert habeeigentlich wollte ich wissen,
ob mir jemand das zählen der beliebig vielen Parameter (mit der offizielle Bezeichnung variablen Argumentliste) abnehmen kann
hm
-
-
@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.