📜  C++ : generate生成随机数为Vector赋值

📅  最后修改于: 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应该有一个确定的大小。

示例1:

使用lambda函数为容量为10的vector容器赋值随机数。

//初始化一个具有10个整数的值0的向量
std :: vector < int > vecOfRandomNums(10 ); 

//通过lambda func生成10个随机数并将其填充到向量中
std::generate(vecOfRandomNums.begin(), vecOfRandomNums.end(), []() {
    return rand() % 100;
});

示例2:

我们定义一个能够返回随机数的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;
}