Prev Next Up Title Contents Index

Algoritmit


Edellisessä esimerkissä stdmap.cpp käytettiin "algoritmia" for_each tulostamaan jokainen alkio. Samoja algoritmeja voidaan käyttää muillekin tietorakenteille. Jopa tavallisille taulukoille:

cpp\luokat\foreach.cpp - esimerkki STL:n algoritmeista

	/* 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;
	}

Tehtävä 1.3 foreach

Muuta esimerkkien stdlist.cpp ja stdset.cpp tulostus toimimaan käyttäen algoritmia foreach. Lisää kumpaankin esimerkkiin vielä suurimman alkion etsiminen ja tulostaminen.


Prev Next Up Title Contents Index