Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Стандартная библиотека шаблонов включает функции, которые программисты могут использовать, чтобы сортировать массивы контейнеров. Одна из этих функций sort функция. Функция sort выполняет быстрый sort (quicksort) в контейнере.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: | #include <iostream>#include <cstdlib>#include <ctime>#include <vector>#include <algorithm>#include <iterator> using namespace std; int random_less_than_50(void) { return (rand() % 50);} int main(int argc, char* argv[]) { // seed the random number generator srand(time(0)); // create a vector with ten random elements (all less than 50) vector<int> v; back_insert_iterator< vector<int> > back_itr(v); generate_n(back_itr, 10, random_less_than_50); // display its contents ostream_iterator<int> out(cout, " "); copy(v.begin(), v.end(), out); // sort the vector sort(v.begin(), v.end()); // display its contents, sorted cout << endl; copy(v.begin(), v.end(), out); return EXIT_SUCCESS;} |
Listing 2 Using the sort algorithm |
Листинг 2 использует несколько других функций то объяснение ордера. Во-первых, функция STL generate_n используется в Перечислении 2, чтобы заполнить вектор с десятью случайными числами. Эта функция берет в качестве параметров вывод iterator, много элементов, чтобы генерировать, и функция, чтобы использовать, чтобы генерировать каждый элемент. Сгенерированные элементы помещаются в вывод iterator определенный в первом параметре. В этом случае, вывод iterator является a back_insert_iterator для вектора v. Таким образом, все элементы, сгенерированные функцией в третьем параметре, помещаются в конце вектора v. Функция, определенная в третьем параметре, является оберткой для C-библиотечной-функции рэнд. Функция рэнд возвращает случайное число из генератора случайных чисел времени выполнения. Это случайное число может быть довольно большим, таким образом, функция обертки используется, чтобы сократить количество, возвращенное к меньшему диапазону значений.
вид функция может работать только на контейнерах, которые обеспечивают произвольный доступ iterators. Контейнеры такой как вектор, двухсторонняя очередь, и строка все обеспечивают произвольный доступ iterators. Начиная с STL список контейнер не обеспечивает произвольный доступ iterators общего назначения вид функция на a список возразите результатам в ошибке времени компиляции. Так как связанные списки часто должны сортироваться, список у контейнера есть специальное предложение вид функция членства. Перечисление 3 демонстрирует свое использование.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: | #include <iostream>#include <cstdlib>#include <ctime>#include <list>#include <algorithm>#include <iterator> using namespace std; int random_less_than_50(void) { return (rand() % 50);} int main(int argc, char* argv[]) { // seed the random number generator srand(time(0)); // create a list with ten random elements // (all less than 50) list<int> ls; back_insert_iterator< list<int> > back_itr(ls); generate_n(back_itr, 10, random_less_than_50); // display its contents ostream_iterator<int> out(cout, " "); copy(ls.begin(), ls.end(), out); // sort the list // The following can NOT be used since lists // do not provide random access iterators // sort(ls.begin(), ls.end()); ls.sort(); // display its contents again cout << endl; copy(ls.begin(), ls.end(), out); return EXIT_SUCCESS;} |
Listing 3 Sorting a list |
В дополнение к сортировке STL обеспечивает возможность для перестановка содержание контейнера. Перестановка, противоположность сортировки, является случайным расположением данных в наборе. Следующее перечисление демонстрирует функцию STL random_shuffle.
Дата публикования: 2014-11-29; Прочитано: 252 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!