home *** CD-ROM | disk | FTP | other *** search
- // CORSO DI C++ - LEZIONE 21
-
- #include <iostream>
- #include <numeric>
- #include <vector>
- #include <algorithm>
- #include <time.h>
-
- using namespace std;
-
- //genera un numero random tra 0 e 15
- int numeroRandom() {
- /* La generazione di numeri random e'
- sempre un grosso problema: la seguente
- funzione non e' comunque una buona
- generatrice di numeri random... */
-
- int n,m;
-
- n = rand();
- /* per avere un intero casuale
- fra 0 e 15, estremi inclusi */
- m = n%16;
-
- return m;
- }
-
- //classe per la definizione del function object
- class numeroCasuale {
-
- public:
- void operator()(int &x) {
- x = numeroRandom();
- }
-
- };
-
- //funzione per l'eliminazione degli elementi duplicati in un contenitore
- template <class C>
- void EliminaDuplicati(C& c) {
- sort(c.begin(),c.end()); //ordino il contenitore per rendere
- //"adiacenti" i suoi elementi duplicati
- C::iterator p = unique(c.begin(),c.end());
- // ho creato la sotto-sequenza di
- // elementi non duplicati
- c.erase(p,c.end());
- // cancellazione manuale degli
- // elementi superflui
- }
-
-
- int main() {
-
- //inizializzo il generatore di random
- srand(time(0));
-
- //istanzio il vettore di interi a una dimensione casuale
- int N = numeroRandom();
- vector<int> v(N);
- numeroCasuale f;
- cout << "elementi da processare: " << N << endl << endl;
-
- //inizializzo v con numeri random utilizzando il function object f
- for_each(v.begin(),v.end(),f);
-
- cout << "v contiene i seguenti elementi" << endl;
- for(int k=0;k<v.size();k++)
- cout << v[k] << " ";
- cout << endl << endl;
-
- //conto le occorrenze del numero 9
- int quanti_nove = count(v.begin(),v.end(),9);
- cout
- << "9 compare nella sequenza "
- << quanti_nove
- << " volte!" << endl;
-
- //puntatore al "9" tramite find()
- if (quanti_nove>0)
- cout << "l'indirizzo del primo 9 e' "
- << find(v.begin(),v.end(),9) << endl;
- cout << endl;
-
- //copio v in v2
- vector<int> v2(N);
- copy(v.begin(),v.end(),v2.begin());
-
- cout << "v2 contiene i seguenti elementi" << endl;
- for(k=0;k<v2.size();k++)
- cout << v2[k] << " ";
- cout << endl << endl;
-
- //elimino i doppioni tramite la funzione EliminaDuplicati() definita sopra
- EliminaDuplicati(v2);
- cout << "eliminando i duplicati v2 contiene i seguenti elementi" << endl;
- for(k=0;k<v2.size();k++)
- cout << v2[k] << " ";
- cout << endl << endl;
-
- return 0;
- }
-