Maximilian Krieg
Wissen, Technik & Erfahrungen
Wissen, Technik & Erfahrungen
Wissen, Technik & Erfahrungen

template
T accumulate( IterIn first, IterIn last, T init ){
while( first!=last ) {
init = init + *first;
++first;
}
return init;
}
//Anwendungsbeispiel
void f( vector& vd, int* p, int n )
{
// addiere die Elemente von vd:
// der Typ des 3. Arguments bestimmt auch die Rechengenauigkeit
double sum = accumulate( vd.begin(), vd.end(), 0.0 );
// addiere die int Werte in ein int (Überlauf gut möglich):
// p+n kann man sich grob als &p[n] vorstellen
int si = accumulate( p, p+n, 0 );
// addiere die int Werte in ein long:
long sl = accumulate( p, p+n, long(0) );
// addiere die int Werte in ein double:
double s2 = accumulate( p, p+n, 0.0 );
// die Variable für den Rückgabewert kann im Initialisierer verwendet werden
double s3 = 0;
s3 = accumulate( vd.begin(), vd.end(), s3 );
}
int main()
{
int sum = accumulate( v.begin(), v.end(), 0 );
// sum wird 10
// StdLib Header für accumulate(): numeric
}
template
T accumulate( IterIn first, IterIn last, T init, BinOp op )
{
while( first!=last )
{
init = op( init, *first );
// d.h. "init op *first"
++first;
}
return init;
}
//Anwendungsbeispiel für Multiplikation
#include
void f( list& ld ) {
double product = accumulate( ld.begin(), ld.end(), 1.0,
multiplies() );
}
int main() {
map<string,int> words; // Worte und ihre Häufigkeit
string s;
while( cin>>s && s!="quit" )
++words[s]; // der Schlüssel von words ist vom Typ string
// die int Werte von words werden mit 0 initialisiert
// wenn s schon enthalten ist, erhöht map dessen Wert mit ++ um 1
// wenn s noch nicht enthalten ist, wird ein (s,0)-Paar
// eingefügt und mit ++ auf den Wert 1 erhöht
// words[s] liefert int& als Anzahl des Worts s
typedef map<string,int>::const_iterator Iter;
for( Iter p = words.begin(); p != words.end(); ++p )
cout << p->first << ':' << p->second << '\n';
return 0;
}
Ende: Seite 42