📅  最后修改于: 2020-09-07 07:09:40             🧑  作者: Mango
Generate函数:
template
void generate(_FIter start, _FIter end, _Generator gen);
generate()将按照gen制定的规则,更新start到end-1范围内的元素;假设vector的大小为n,则std :: generate将调用gen()n次,并将每个值从start到end -1复制到vector。因为,std :: generate()是复制元素,而不是pushback; 因此使用该方法前,vector应该有一个确定的大小。
使用lambda函数为容量为10的vector容器赋值随机数。
//初始化一个具有10个整数的值0的向量
std :: vector < int > vecOfRandomNums(10 );
//通过lambda func生成10个随机数并将其填充到向量中
std::generate(vecOfRandomNums.begin(), vecOfRandomNums.end(), []() {
return rand() % 100;
});
我们定义一个能够返回随机数的functor。
struct RandomGenerator {
int maxValue;
RandomGenerator(int max) :
maxValue(max) {
}
int operator()() {
return rand() % maxValue;
}
};
//初始化一个具有10个整数的值0的向量
std::vector vecOfRandomNums(10);
//由Functor生成10个随机数并将其填充到向量中
std::generate(vecOfRandomNums.begin(), vecOfRandomNums.end(), RandomGenerator(500));
std :: generate从头到尾迭代向量,在每次迭代期间,调用RandomGenerator函子,并将每个返回的值分配给vector中.
完整代码如下:
#include
#include
#include
#include
struct RandomGenerator {
int maxValue;
RandomGenerator(int max) :
maxValue(max) {
}
int operator()() {
return rand() % maxValue;
}
};
int main() {
// Initialize a vector with 10 ints of value 0
std::vector vecOfRandomNums(10);
// Generate 10 random numbers by lambda func and fill it in vector
std::generate(vecOfRandomNums.begin(), vecOfRandomNums.end(), []() {
return rand() % 100;
});
std::cout << "Random Number Generated by Lambda Function" << std::endl;
for (int val : vecOfRandomNums)
std::cout << val << std::endl;
// Generate 10 random numbers by a Functor and fill it in vector
std::generate(vecOfRandomNums.begin(), vecOfRandomNums.end(),
RandomGenerator(500));
std::cout << "Random Number Generated by Functor" << std::endl;
for (int val : vecOfRandomNums)
std::cout << val << std::endl;
return 0;
}