STL - generate

Dal quinto capitolo di Designing Components with the C++ STL, di Ulrich Breymann. Algoritmi standard.

Sezione dedicata agli algoritmi che modificano le sequenze su cui operano.

5.4.8: generate e generate_n

L'algoritmo generate(), con la sua variazione generate_n(), permette di inizializzare, interamente o parzialmente, una collezione usando una funzione o un functor.

Nell'esempio che segue usiamo il functor Random per generare numeri casuale e la funzione powerOfTwo() per generare iterativamente le potenze di due:

#include<iostream>
#include<cstdlib> // rand() and RAND_MAX
#include<algorithm>
#include<vector>

using namespace std;

void dump(const vector<int>& v) {
vector<int>::const_iterator it = v.begin();
while (it != v.end()) {
cout << *it++ << ' ';
}
cout << endl;
}

class Random {
public:

Random(int b) : range(b) {
srand ( time(NULL) );
}

int operator()() {
return (int) ((double) rand() * range / (RAND_MAX + 1.0));
}
private:
int range;
};

int powerOfTwo() {
static int value = 1;
return (value *= 2) / 2;
}

int main() {
vector<int> v(12);

generate(v.begin(), v.end(), Random(1000));
dump(v);

vector<int>::const_iterator it = generate_n(v.begin(), 10, powerOfTwo);
dump(v); // 1 2 4 8 16 32 64 128 256 512 x y

cout << "it in position = " << (it - v.begin())
<< ", *it = " << *it << endl;

}

Nessun commento:

Posta un commento