Функция generate
Функция generate заполняет элементы
диапазона значениями, которые возвращает
функция-генератор. В первый параметр мы
передаем итератор начала диапазона, а во
второй - итератор конца диапазона (не
включается). Третьим параметром выступает
функция-генератор, которая не принимает
аргументов и возвращает очередное значение.
Функция вызывается ровно столько раз, сколько
элементов содержит диапазон.
Синтаксис
generate(first, last, gen)
Пример
Давайте заполним вектор 5 элементами,
которые возвращает функция-генератор,
выдающая последовательные числа:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int counter = 0;
int nextNum()
{
return ++counter;
}
int main()
{
vector<int> res(5);
generate(res.begin(), res.end(), nextNum);
for (int el : res) {
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте заполним вектор строками, которые построит лямбда-выражение, добавляющее к букве её порядковый номер:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
vector<string> res(5);
int index = 0;
generate(res.begin(), res.end(), [&index]() {
string s = "a";
return s + to_string(++index);
});
for (const string& el : res) {
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
"a1" "a2" "a3" "a4" "a5"
Пример
Давайте заполним только часть вектора, передав в функцию итераторы нужного поддиапазона:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> res = {1, 2, 3, 4, 5};
generate(res.begin() + 1, res.begin() + 4, []() {
return 0;
});
for (int el : res) {
cout << el << " ";
}
return 0;
}
Результат выполнения кода:
1 0 0 0 5
Смотрите также
-
функция
generate_n,
которая заполняет n элементов значениями -
функция
fill,
которая заполняет диапазон одним значением -
функция
iota,
которая заполняет диапазон последовательными числами -
функция
transform,
которая преобразует элементы диапазона