generate_n
Присваивает значения, создаваемые объектом функции, указанному количеству элементов в диапазоне и возвращается на позицию, следующую за последним присвоенным значением.
template<class OutputIterator, class Diff, class Generator> void generate_n( OutputIterator First, Diff Count, Generator Gen);
Параметры
First
Выходной итератор, обращающийся к позиции первого элемента в диапазоне, которому назначаются значения.Count
Целочисленный тип со знаком или без знака, указывающий количество элементов, которым функция генератора назначит значение.Gen
Объект функции, который вызывается без аргументов и используется для формирования значений, которые необходимо назначить каждому из элементов в диапазоне.
Заметки
Этот объект функции вызывается для всех элементов в диапазоне; он необязательно должен возвращать одинаковое значение при вызове. Например, он может читать данные из файла или ссылаться на локальное состояние и изменять его. Тип результата должен поддерживать преобразование в тип значения прямых итераторов диапазона.
Указанный диапазон должен быть допустимым. Все указатели должны поддерживать удаление ссылок, а последняя позиция в последовательности должна быть доступна из первой позиции за счет увеличения на один.
Отношение сложности линейное, требуется ровно Count вызовов генератора.
Пример
// cl.exe /EHsc /nologo /W4 /MTd
#include <vector>
#include <deque>
#include <iostream>
#include <string>
#include <algorithm>
#include <random>
using namespace std;
template <typename C> void print(const string& s, const C& c) {
cout << s;
for (const auto& e : c) {
cout << e << " ";
}
cout << endl;
}
int main()
{
const int elemcount = 5;
vector<int> v(elemcount);
deque<int> dq(elemcount);
// Set up random number distribution
random_device rd;
mt19937 engine(rd());
uniform_int_distribution<int> dist(-9, 9);
// Call generate_n, using a lambda for the third parameter
generate_n(v.begin(), elemcount, [&](){ return dist(engine); });
print("vector v is: ", v);
generate_n(dq.begin(), elemcount, [&](){ return dist(engine); });
print("deque dq is: ", dq);
}
Вывод
vector v is: 1 -9 -3 2 -9
deque dq is: -9 7 -2 4 8
Требования
Заголовок: <algorithm>
Пространство имен: std