Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
random_sample_random_sample_n [2009/04/29 10:55] pplonski |
random_sample_random_sample_n [2009/04/29 10:59] (aktualna) pplonski |
||
|---|---|---|---|
| Linia 2: | Linia 2: | ||
| Obie funkcje random_sample i random_sample_n pochodzą z rozszerzenia SGI i nie są częścią standardu C++. | Obie funkcje random_sample i random_sample_n pochodzą z rozszerzenia SGI i nie są częścią standardu C++. | ||
| - | Złożoność obu algorytmów jest liniowa. Funkcje te kopiują elementy z losową kolejnością. | + | |
| + | Złożoność obu algorytmów jest liniowa. | ||
| + | |||
| + | Funkcje te kopiują elementy z losową kolejnością. | ||
| ===== random_sample ===== | ===== random_sample ===== | ||
| Linia 40: | Linia 43: | ||
| == Parametry == | == Parametry == | ||
| * ForwardIterator - iterator który pozwala tylko pobierać następne elementy | * ForwardIterator - iterator który pozwala tylko pobierać następne elementy | ||
| - | * OutputIterator - iterator w którym można zapisać wartość do wskazywanej pozycji i przesunąć się do wskazywania na następny element ale nie można odczytać wartości i cofnąć się. | + | * OutputIterator - iterator w którym można zapisać wartość do wskazywanej pozycji i przesunąć się do wskazywania na następny element ale nie można odczytać wartości i cofnąć się |
| * Distance - wartość całkowita wyznaczająca liczbę elementów na wyjściu | * Distance - wartość całkowita wyznaczająca liczbę elementów na wyjściu | ||
| * RandomNumberGenerator - funktor (zachowanie takie samo jak dal random_sample), wartość Distance jest jego argumentem | * RandomNumberGenerator - funktor (zachowanie takie samo jak dal random_sample), wartość Distance jest jego argumentem | ||
| Linia 79: | Linia 82: | ||
| /* random_sample */ | /* random_sample */ | ||
| cout << "random_sample\n"; | cout << "random_sample\n"; | ||
| - | int *ret_val; // wskaźnik na wartość zwracaną | + | int *ret_val; // wskaźnik na wartość zwracaną |
| ret_val = __gnu_cxx::random_sample(A, A+N, B, B+n); // przykład działania | ret_val = __gnu_cxx::random_sample(A, A+N, B, B+n); // przykład działania | ||
| cout << *(ret_val-1) << endl; // wartość zwrócona | cout << *(ret_val-1) << endl; // wartość zwrócona | ||
| for(i = 0; i < n; ++i) | for(i = 0; i < n; ++i) | ||
| - | cout << B[i] << " "; // wartości na wyjściu | + | cout << B[i] << " "; // wartości na wyjściu |
| cout << endl; | cout << endl; | ||
| - | RandomNumberGenerator rng; // funktor | + | RandomNumberGenerator rng; // funktor |
| - | cout << rng(13) << endl; // przykład użycia funktora | + | cout << rng(13) << endl; // przykład użycia funktora |
| __gnu_cxx::random_sample(A, A+N, B, B+n, rng); // wersja z genratorem zewnętrznym | __gnu_cxx::random_sample(A, A+N, B, B+n, rng); // wersja z genratorem zewnętrznym | ||
| copy(B, B + n, ostream_iterator<int>(cout, " ")); // wypisanie z użyciem operatora ostream_iterator | copy(B, B + n, ostream_iterator<int>(cout, " ")); // wypisanie z użyciem operatora ostream_iterator | ||
| Linia 94: | Linia 97: | ||
| /* random_sample_n */ | /* random_sample_n */ | ||
| cout << "random_sample_n\n"; | cout << "random_sample_n\n"; | ||
| - | vector<int> vec; // wektor do zapisu elementów wyjściowych | + | vector<int> vec; // wektor do zapisu elementów wyjściowych |
| vector<int>::const_iterator it; | vector<int>::const_iterator it; | ||
| insert_iterator<vector<int> > ii(vec, vec.begin()); // insert_iterator do wstawiania elementów do wektora | insert_iterator<vector<int> > ii(vec, vec.begin()); // insert_iterator do wstawiania elementów do wektora | ||
| - | __gnu_cxx::random_sample_n(A, A+N, ii, n); // przykład działania funkcji | + | __gnu_cxx::random_sample_n(A, A+N, ii, n); // przykład działania funkcji |
| for(it = vec.begin(); it != vec.end(); ++it) | for(it = vec.begin(); it != vec.end(); ++it) | ||
| cout << *it << " "; | cout << *it << " "; | ||