STL: generate ,geterate_n

在随机生成一定范围不重复数时用到random_shuffle函数,之前填充数组都是用for循环,

想到之前python中的range生成序列,于是在C++中找到对应的generate用来生成所需数组。

 

用来生成元素,并填充到一个序列中

 

generate:

1 template <class ForwardIterator, class Generator>
2   void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
3 {
4   while (first != last) {
5     *first = gen();
6     ++first;
7   }
8 }

Generator gen生成器,是一个不接受参数,且有返回参数的函数,first和last是生成的范围。

generate_n:

 void generate_n (OutputIterator first, Size n, Generator gen);

first插入起始位置,n插入元素个数,gen元素生成器.

 1 #include<iostream>
 2 #include<vector>
 3 #include<algorithm>
 4 #include<time.h>
 5 #include <iterator> 
 6 using namespace std;
 7 
 8 int nextNum() {  
 9     static int n = 1;  
10     return n++;  
11 
12 } 
13 
14 class Range_generate{
15     private:
16         int m_Value;
17         int m_interval;
18     public:
19         Range_generate(int value,int interval) {m_Value=value-interval;m_interval=interval;}
20         int operator()(){
21             return m_Value+=m_interval;} 
22 };                                              //Lambda是函数对象(Function Object)的语法糖,Lambda最终会被转换成所示的Functor类      
23 
24 int main(){
25     srand((unsigned int) time(NULL));
26     vector<int> array(10);
27     generate(array.begin(),array.end(),[]{return rand()%10;});
28     for(vector<int>::iterator ptr=array.begin();ptr!=array.end();){
29         cout<<*ptr++<<" ";
30         //ptr++;
31     }
32     cout<<endl;
33     generate(array.begin(),array.end(),Range_generate(1,2));    //首项1,间隔2   
34     ostream_iterator<int> screen(cout," "); 
35     copy(array.begin(),array.end(),screen);
36     system("pause");
37     return 0;
38 }

 

转载于:https://www.cnblogs.com/Aspirin-Fight/p/4645936.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值