随机数组的生成方法

温故而知新,曾经走过的路、做过的事情,总需要等到一个时候,也许是夜深人静,才会想起是该留下点东西。

忙碌了一个又一个7天,身心疲惫,却没有《最美丽的7天》那么悲情;既然都熬过来了,总会收获点甚么吧。

 

本文将为您讲述(也算是记录),如何生成一个随机的不重复的数组(也可以说是列表),当然所要填充的数都是整数。

下面来看下怎么实现吧:

 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]<<"\t";   
21     }  
22 
23     getchar();
24     return 0;
25 }
Test_Random.cpp

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]<<"\t";   
	}  

	getchar();
	return 0;
}

注:如上代码有兴趣的盆友们请尽情尝试吧,不用怕小伙伴们都惊呆了!

 

Solution:要生成可变长度的随机数列,正确可行的方案又是什么呢?

 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]<<"\t";
19     }
20     
21     getchar();
22     if(!a.empty())
23     {
24         a.swap(vector<int>());
25     }
26     return 0;
27 }
TestRandom2.cpp

1.首先创建vector<>对象a,当然根据个人需要还可以用double或其他类型。

2.for循环插入1000个元素,数值范围是1~1000。

3.使用random_shuffle高斯随机将数组中的元素打乱顺序,这样就生成了随机数组;如果你想更乱,可以多次调用random_shuffle进行操作。

4.Show出随机数组,查看效果。

5.结束时注意清空vector<>。

  

 

posted @ 2013-09-07 00:34  yison.li  阅读(1788)  评论(2编辑  收藏  举报