/* FOREACH.CPP */ // Esimerkki STL:n algoritmien käytöstä #include #include #include using namespace std; void tulosta_alkio(const int &alkio) { cout << alkio << ' '; } class iotaGen { // Apuluokka lukujonojen muodostamiseksi int current; int step; public: // iotaGen(int start=0, int istep=1) : current(start), step(istep) {} iotaGen(int start=0, int istep=1) { current = start; step = istep; } int operator () () { int v=current; current += step; return v; } }; int nelio(int n) { return n*n; } const string VIIVA = "------------------------------------------------------------\n"; /****************************************************************************/ int main(void) { ostream_iterator output(cout," "); // Uusi luokka tulostamista varten cout << VIIVA; int luvut[6] = { 23, 45, 12, 7, 9, 2 }; for_each(luvut,luvut+6,tulosta_alkio); cout << endl;// 23 45 12 7 9 2 cout << "Suurin: " << *max_element(luvut,luvut+6) << endl; // Suurin: 45 fill(luvut+3,luvut+6,175); copy(luvut,luvut+6,output); cout << endl; // 23 45 12 175 175 175 int *p = find(luvut,luvut+6,45); if ( p == luvut+6 ) cout << "Löytyi: " << *p << endl; // Löytyi: 45 p = find(luvut,luvut+6,46); if ( p == luvut+6 ) cout << "Ei löytynyt!" << endl; // Ei löytynyt! generate(luvut,luvut+6,iotaGen(10,5)); for_each(luvut,luvut+6,tulosta_alkio); cout << endl;// 10 15 20 25 30 35 reverse(luvut,luvut+6); copy(luvut,luvut+6,output); cout << endl; // 35 30 25 20 15 10 sort(luvut,luvut+6); copy(luvut,luvut+6,output); cout << endl; // 10 15 20 25 30 35 transform(luvut,luvut+6,luvut,nelio); // Tekee jokaiselle alkiolle luvut[i]=nelio(luvut[i]) copy(luvut,luvut+6,output); cout << endl; //100 225 400 625 900 1225 return 0; }