【C++】generate的用法(详解)

C++ 中的 std::generate 是 C++11 引入的一个算法,用于为指定范围内的每个元素生成一个新值,并将这些值赋给该范围内的元素。它通常与生成器(如 lambda 表达式、函数对象或函数指针)一起使用,以按照某种规则生成一系列值。

std::generate 的函数签名如下:

template< class ForwardIt, class Generator >
void generate( ForwardIt first, ForwardIt last, Generator g );

  • first 和 last 定义了要填充值的范围 [first, last)
  • g 是一个生成器对象,它必须支持函数调用操作,并且每次调用时应返回一个新值。

下面是一个详细的代码示例,演示如何使用 std::generate 来填充一个 std::vector 容器:

#include <iostream>
#include <vector>
#include <algorithm> // std::generate
#include <random>    // std::default_random_engine, std::uniform_int_distribution

int main() {
    // 创建一个包含 10 个元素的 vector,初始值为 0
    std::vector<int> vec(10, 0);

    // 创建一个随机数生成器,生成范围在 [1, 100] 之间的整数
    std::random_device rd;  // 用于获得随机种子
    std::default_random_engine eng(rd());
    std::uniform_int_distribution<int> distr(1, 100);

    // 使用 std::generate 来填充 vector
    std::generate(vec.begin(), vec.end(), ‌:ml-search[&] {
        return distr(eng);
    });

    // 输出生成的随机数
    for (const auto& num : vec) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

在这个示例中:

  1. 我们创建了一个包含 10 个元素的 std::vector<int>,初始值全部为 0。
  2. 使用 std::random_device 和 std::default_random_engine 创建了一个随机数生成器 eng,以及一个生成范围在 [1, 100] 之间的整数分布 distr
  3. 使用 std::generate 填充 vec,其中生成器是一个 lambda 表达式 ‌:ml-search[&] { return distr(eng); },每次调用该 lambda 表达式都会生成一个新的随机数。
  4. 最后,我们遍历 vec 并输出生成的随机数。

std::generate 是一种非常灵活和高效的填充容器的方法,特别适用于需要根据某种复杂逻辑生成一系列值的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值