РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
378 of 815 menu

Функция 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,
    которая преобразует элементы диапазона
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить