На этом шаге мы рассмотрим алгоритмы, используемые для генерации значений.
Для присваивания сгенерированных значений можно воспользоваться следующими алгоритмами:
void generate (ForwardIterator beg, ForwardIterator end, Func op) void generate_n (OutputIterator beg, Size num, Func op)
Алгоритм generate() присваивает значения, сгенерированные вызовом ор() для каждого элемента в интервале [beg,end).
Алгоритм generate_n() присваивает значения, сгенерированные вызовом оp() для первых num элементов в интервале [beg,...).
Перед вызовом необходимо убедиться в том, что приемный интервал имеет достаточный размер, или использовать итераторы вставки.
Сложность линейная (numberOfElements или num вызовов ор() и присваиваний).
В следующей программе алгоритмы generate() и generate_n() используются для вставки и присваивания случайных значений:
//--------------------------------------------------------------------------- #include <vcl.h> #include <iterator> #include "algostuff.hpp" #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main() { list<int> coll; // Получение пяти случайных чисел generate_n (back_inserter(coll), // Начало приемного интервала 5, // Счетчик rand); // Генератор значений PRINT_ELEMENTS(coll,"Пять случайных чисел:\n"); // Замена пятью новыми случайными числами generate (coll.begin(), coll.end(), // Приемный интервал rand); // Генератор значений PRINT_ELEMENTS(coll,"Заменили следующими случайными числами:\n"); getch(); return 0; } //---------------------------------------------------------------------------
Примерный результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
Результат зависит от платформы, так как последовательность случайных чисел, сгенерированная функцией rand(), не стандартизирована.
Пример использования алгоритма generate() с объектами функций для построения числовой последовательности приведен на 240 шаге.
Со следующего шага мы начнем рассматривать алгоритмы замены элементов.