程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> STL: generate ,geterate_n,generategeterate_n

STL: generate ,geterate_n,generategeterate_n

編輯:C++入門知識

STL: generate ,geterate_n,generategeterate_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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved