STL - random_shuffle

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.13: random_shuffle

Questo algoritmo permette di mescolare l'ordine degli elementi in una sequenza che fornisce accesso casuale ai suoi elementi, come vector o deque. Usa un suo generatore di numeri causali, o é possibile passagliene uno a nostra scelta.

Nell'esempio usiamo sia un nostro generatore, Rand, sia quello di default:

#include<algorithm>
#include<vector>
#include<algo.h>

using namespace std;

class Rand {
public:

Rand(long int seed = 1) : r(seed) {
}

int operator()(int x) {
r = (125 * r) % 8192;
return int(double(r) / 8192.0 * x);
}
private:
long int r;
};

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

int main() {
vector<int> v(12);
iota(v.begin(), v.end(), 0);

random_shuffle(v.begin(), v.end());
dump(v);

random_shuffle(v.begin(), v.end());
dump(v);

Rand aRand;
random_shuffle(v.begin(), v.end(), aRand);
dump(v);
}

Nessun commento:

Posta un commento