18910140161

C random _ shuffle()方法案例详解

顺晟科技

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()方法的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章,希望以后大家多多支持我们!

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航