📜  std :: generate在C++中(1)

📅  最后修改于: 2023-12-03 14:47:42.664000             🧑  作者: Mango

C++ 中的 std::generate

在 C++ 标准库中,std::generate 是一个算法函数,用于将指定范围内的元素替换为由指定函数生成的值。该函数属于头文件 <algorithm>。下面是具体的函数声明:

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

其中,ForwardIt 是迭代器类型,指定要替换元素的范围;Generator 是一个可调用对象类型,接受无参数,返回生成的值。函数将对迭代器范围 [first, last) 内的每个元素调用 g(),并将结果赋值给该元素。

以下是一个示例代码:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v(10);

    // 使用函数对象
    struct generator {
        int i;
        int operator()() {
            return i++;
        }
    } g{1};
    std::generate(v.begin(), v.end(), g);

    // 使用 lambda 表达式
    std::generate(v.begin(), v.end(), [n = 0]() mutable {
        return n++;
    });

    // 输出 v 中的所有元素
    for (int i : v) {
        std::cout << i << ' ';
    }
    std::cout << '\n';
    // 输出:1 2 3 4 5 6 7 8 9 10

    return 0;
}

上述示例代码中,我们使用了两种不同的方法来指定生成规则。第一种方法使用了一个函数对象 generator,接受初始值 1,每次生成的值是当前的 i,之后值 i 加一。第二种方法使用 lambda 表达式,并使用 mutable 修饰符来允许修改捕获的变量 n,并且每次生成的值是 n 自增后的新值。该示例中的输出结果是 1 2 3 4 5 6 7 8 9 10

总结一下,std::generate 函数是一个方便的工具,可以简化一些需要生成一定规律元素的场景,同时其可调用对象的使用方式也非常灵活。