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