Edellisessä esimerkissä stdmap.cpp käytettiin "algoritmia" for_each tulostamaan jokainen alkio. Samoja algoritmeja voidaan käyttää muillekin tietorakenteille. Jopa tavallisille taulukoille:
/* FOREACH.CPP */
// Esimerkki STL:n algoritmien käytöstä, BC 5.00
#include <iostream.h>
#include <algorithm>
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) {}
int operator () () { int v=current; current += step; return v; }
};
int nelio(int n) { return n*n; }
#define VIIVA "------------------------------------------------------------\n"
/****************************************************************************/
int main(void)
{
ostream_iterator<int> 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 ) 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;
}