在随机生成一定范围不重复数时用到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 }