算法generate( )的使用方法:例如何在容器中生成随机数或生成菲波拉契数列等;
时间: 2024-02-22 13:58:44 浏览: 137
matlab 各种随机数的产生方法,有例子
4星 · 用户满意度95%
STL中的generate()算法可以用来生成容器中的元素,其使用方法如下:
```
template <class ForwardIterator, class Generator>
void generate (ForwardIterator first, ForwardIterator last, Generator gen);
```
其中,first和last表示一个迭代器范围,gen是一个可调用对象,如函数、函数对象或Lambda表达式,用来生成容器元素的值。
下面以生成随机数和生成斐波那契数列为例进行说明。
1. 生成随机数
可以使用C++11中的随机数库<random>生成随机数,并将其填充到容器中。例如,生成10个[0, 100)之间的随机数,并将其填充到vector中:
```
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
using namespace std;
int main() {
vector<int> nums(10);
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(0, 99);
generate(nums.begin(), nums.end(), [&](){ return dis(gen); });
for (auto num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
其中,random_device rd用于获取随机种子,mt19937是一个随机数引擎,uniform_int_distribution<>用于指定随机数的范围,[&](){ return dis(gen); }是一个Lambda表达式,用于生成随机数。generate()算法会将该Lambda表达式的返回值填充到vector中。
2. 生成斐波那契数列
可以使用generate()算法生成斐波那契数列,并将其填充到容器中。例如,生成前10个斐波那契数列,并将其填充到vector中:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> fibs(10);
generate(fibs.begin(), fibs.end(), [n=0, m=1]() mutable {
int t = n + m;
n = m;
m = t;
return n;
});
for (auto fib : fibs) {
cout << fib << " ";
}
cout << endl;
return 0;
}
```
其中,[n=0, m=1]() mutable是一个Lambda表达式,用于生成斐波那契数列。mutable关键字表示该Lambda表达式中的值可以被修改,[n=0, m=1]表示n和m的初始值,Lambda表达式中的代码用于计算下一个斐波那契数列的值。generate()算法会将该Lambda表达式的返回值填充到vector中。
阅读全文