📅  最后修改于: 2023-12-03 14:47:42.664000             🧑  作者: Mango
在 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
函数是一个方便的工具,可以简化一些需要生成一定规律元素的场景,同时其可调用对象的使用方式也非常灵活。