温故而知新,曾经走过的路、做过的事情,总需要等到一个时候,也许是夜深人静,才会想起是该留下点东西。
忙碌了一个又一个7天,身心疲惫,却没有《最美丽的7天》那么悲情;既然都熬过来了,总会收获点甚么吧。
本文将为您讲述(也算是记录),如何生成一个随机的不重复的数组(也可以说是列表),当然所要填充的数都是整数。
下面来看下怎么实现吧:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 int main() 6 { 7 int a[1000]; 8 9 for(int i=0;i<1000;i++) 10 { 11 a[i] = i; 12 } 13 14 int* a_begin = a; 15 int* a_end = a + sizeof(a)/sizeof(int); 16 random_shuffle(a_begin,a_end); 17 18 for(int j=0; j<1000; j++) 19 { 20 cout<<a[j]<<" "; 21 } 22 23 getchar(); 24 return 0; 25 }
1.首先创建数组对象a[],当然根据个人需要还可以用double或其他类型的数组。
2.给数组赋初值,代码中是for循环直接给a[]中各个元素分别赋予了1~1000的整数值。
3.使用random_shuffle高斯随机将数组中的元素打乱顺序,这样就生成了随机数组;如果你想更乱,可以多次调用random_shuffle进行操作。
4.Show出随机数组,查看效果。
问题:如果我想要生成可变长度的随机数列又该怎么办呢?如下方法是否可行呢?
int main() { int* a = null; a = new int[1000]; for(int i=0;i<1000;i++) { a[i] = i; } int* a_begin = a; int* a_end = a + sizeof(a)/sizeof(int); random_shuffle(a_begin,a_end); for(int j=0; j<1000; j++) { cout<<a[j]<<" "; } getchar(); return 0; }
注:如上代码有兴趣的盆友们请尽情尝试吧,不用怕小伙伴们都惊呆了!
Solution:要生成可变长度的随机数列,正确可行的方案又是什么呢?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include <vector> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 vector<int> a; 9 10 for(int i=0; i<1000; i++) 11 { 12 a.push_back(i); 13 } 14 random_shuffle(a.begin(),a.end()); 15 16 for(int j=0; j<a.size(); j++) 17 { 18 cout<<a[j]<<" "; 19 } 20 21 getchar(); 22 if(!a.empty()) 23 { 24 a.swap(vector<int>()); 25 } 26 return 0; 27 }
1.首先创建vector<>对象a,当然根据个人需要还可以用double或其他类型。
2.for循环插入1000个元素,数值范围是1~1000。
3.使用random_shuffle高斯随机将数组中的元素打乱顺序,这样就生成了随机数组;如果你想更乱,可以多次调用random_shuffle进行操作。
4.Show出随机数组,查看效果。
5.结束时注意清空vector<>。