顺晟科技
2021-08-28 09:38:31
366
假设你需要一个特定范围内的随机数。传统的方法是使用ANSI C函数random(),然后将结果格式化,使其落在指定的范围内。然而,使用这种方法至少有两个缺点。
首先,在格式化的时候,结果往往会失真,所以你无法得到正确的随机数(比如有些数字比其他数字出现的频率更高)
其次,random()只支持整数;它不能用于在数据库中生成随机字符、浮点数、字符串或记录。
c为上述两个问题提供了更好的解决方案,即random_shuffle()算法。别担心,我会告诉你如何使用这个算法来生成不同类型的随机数。
在指定范围内生成一组随机元素的更佳方法是创建一个序列(即向量或内置数组),其中包含指定范围内的所有值。例如,如果您需要生成100个0到99之间的数字,请创建一个向量,并以升序用100个数字填充它。
#包含矢量
使用标准std:vector
int main()
{
向量六;
for(int I=0;i 10(一)
VI . push _ back(I);
/*现在向量包含100个0-99之间的整数,并按升序排列*/
}
填充向量后,使用random_shuffle()算法打乱元素的顺序。Random_shuffle()在标准头文件中定义。因为所有STL算法都是在命名空间std:中声明的,所以您应该注意正确声明数据类型。Random_shuffle()有两个参数,个参数是指向序列个元素的迭代器,第二个参数指向序列最后一个元素的下一个位置。下面的代码片段使用random_shuffle()算法对先前填充到向量中的元素进行加扰:
包括算法
使用std:random _ shuffle
random_shuffle(vi.begin()、VI . end());/*破坏元素*/
如果您想检查加扰的元素,您可以查看它们在加扰后的存储顺序,如下所示:
for(int I=0;i 100(一)
cout VI[I];/*显示无序元素*/
Random_shuffle()是一种完全通用的算法——适用于内置数据类型和用户定义的类型。以下示例创建一个包含七个字符串对象的向量,其中包含一周中的几天,并使用random_shuffle()打乱它们的顺序:
#包含字符串
#包含矢量
#包含算法
#包含iostream
使用命名空间标准;
int main()
{
向量vs;
vs . push _ back(string(' Sunday '));
vs.push_back(字符串('星期一'));
.
vs.push_back(字符串('星期六'));
random_shuffle(vs.begin()、vs . end());/*无序*/
for(int I=0;i7;(一)
cout vs[I];/*无序显示元素*/
}
如何使用random_shuffle()处理内置数组当使用容器代替内置数组时,您不应该承担任何负担。所有的STL算法不仅适用于容器,也适用于序列。因此,您也可以将random_shuffle()算法应用于内置数组。只需注意,random_shuffle()的第二个参数指向数组上限上的下一个元素位置:
char carr[4]={'a ',' b ',' c ',' d ' };
/*carr 4指向数组上限上的下一个元素位置*/
random_shuffle(carr,carr 4);
for(int I=0;i4;(一)
cout carr[I];/*显示无序元素*/
关于C random_shuffle()方法的详细讲解到此结束。关于C random_shuffle()方法的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章,希望以后大家多多支持我们!
28
1990-12
02
2022-09
11
2022-03
11
2022-03
10
2022-03
10
2022-03