本文主要介绍C random_shuffle()方法的详细说明。本文通过一个简单的案例,说明了对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。
假设你需要一个指定范围内的随机数。传统的方法是使用ANSI C的函数random(),然后将结果格式化,使其落在指定的范围内。然而,使用这种方法至少有两个缺点。
首先,在格式化时,结果往往是失真的,因此无法获得正确的随机数(例如,某些数字出现的频率比其他数字高)。
其次,random()只支持整数;不能用它在数据库中生成随机字符、浮点数、字符串或记录。
对于以上两个问题,C提供了一个比较好的解决方案,就是random_shuffle()算法。别担心,我会告诉你如何用这个算法生成不同类型的随机数。
在指定范围内生成一组随机元素的最佳方法是创建一个顺序序列(即向量或内置数组),它包含指定范围内的所有值。例如,如果您需要生成0到99之间的100个数字,那么创建一个向量,并以升序用100个数字填充它。
#包含矢量
使用STD:vector;
int main()
{
向量VI;
for(int I=0;i 10我)
六、push_back(一);
/*现在,向量包含100个从0到99的升序整数*/
}
填充向量后,使用random_shuffle()算法对元素进行加扰。Random_shuffle()是在标准头文件中定义的。因为所有的STL算法都是在名称空间std:)中声明的,所以应该注意正确声明数据类型。Random_shuffle()有两个参数。第一个参数是指向序列第一个元素的迭代器,第二个参数指向序列最后一个元素的下一个位置。以下代码片段使用random_shuffle()算法对先前填充到vector中的元素进行加扰:
包括算法
使用STD:random _ shuffle;
random_shuffle(vi.begin()、VI . end());/*加扰元素*/
如果要检查已加扰的元素,可以通过以下方式查看它们在加扰后的存储顺序:
for(int I=0;i 100我)
cout VI[I];/*无序显示元素*/
Random_shuffle()是一个完全通用的算法——适用于内置数据类型和用户定义的类型。下面的示例创建了一个包含7个string对象的vector,其中包含一周中的各天,并使用random_shuffle()来打乱它们的顺序:
#包含字符串
#包含矢量
#包含算法
#包括iostream
使用命名空间std
int main()
{
向量vs;
vs . push _ back(string(' Sunday '));
vs.push_back (string('周一'));
.
vs.push_back (string('星期六'));
random_shuffle(vs.begin()、vs . end());/*出现故障*/
for(int I=0;I 7;我)
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;I 4;我)
cout carr[I];/*无序显示元素*/
本文关于random _ shuffle()方法案例的详细说明到此为止。有关random _ shuffle()方法的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。