Шаг 288.
Библиотека STL. Алгоритмы STL. Модифицирующие алгоритмы. Присваивание. Присваивание сгенерированных значений

    На этом шаге мы рассмотрим алгоритмы, используемые для генерации значений.

    Для присваивания сгенерированных значений можно воспользоваться следующими алгоритмами:

  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 шаге.

    Со следующего шага мы начнем рассматривать алгоритмы замены элементов.




Предыдущий шаг Содержание Следующий шаг