iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ random_shuffle()方法案例详解
  • 735
分享到

C++ random_shuffle()方法案例详解

2024-04-02 19:04:59 735人浏览 安东尼
摘要

假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。 首先,做格式化时,结果

假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。

首先,做格式化时,结果常常是扭曲的,所以得不到正确的随机数(如某些数的出现频率要高于其它数)

其次,random()只支持整型数;不能用它来产生随机字符,浮点数,字符串数据库中的记录。

对于以上的两个问题,c++中提供了更好的解决方法,那就是random_shuffle()算法。不要着急,下面我就会告诉你如何用这种算法来产生不同类型的随机数。

产生指定范围内的随机元素集的最佳方法是创建一个顺序序列(也就是向量或者内置数组),在这个顺序序列中含有指定范围的所有值。例如,如何你需要产生100个0-99之间的数,那么就创建一个向量并用100个按升序排列的数填充向量。


#include < vector >
using std::vector;
int main()
{
  vector vi;
  for (int i = 0; i < 10; i++)  
    vi.push_back(i);

}  

      填充完向量之后,用random_shuffle()算法打乱元素排列顺序。random_shuffle()定义在标准的头文件中。因为所有的STL算法都是在名字空间std::中声明的,所以你要注意正确地声明数据类型。random_shuffle()有两个参数,第一个参数是指向序列首元素的迭代器,第二个参数则指向序列最后一个元素的下一个位置。下列代码段用random_shuffle()算法打乱了先前填充到向量中的元素: 


include< alGorithm >  
using std::random_shuffle; 
random_shuffle(vi.begin(), vi.end()); 

如果你想检查被打乱的元素,可以用如下方法看一下他们被打乱后存储的次序:


for (int i = 0; i < 100; i++)  
  cout< < vi[i]; 

random_shuffle()是个完全通用的算法-适用于内建的数据类型和用户自定义类型。下面的例子创建了一个有7个字符串对象的向量,它包含一周的天数并使用random_shuffle()打乱他们的排列顺序:


#include < string >  
#include < vector >  
#include < algorithm >  
#include < iOStream >  
using namespace std;  
  
int main()  
  
{  
  
  vector vs;  
  
  vs.push_back(string ("Sunday"));  
  
  vs.push_back (string ("Monday"));  
  
  ...  
  
  vs.push_back (string ("Saturday"));  
  
  random_shuffle(vs.begin(), vs.end());   
  
  for (int i = 0; i << 7; i++)  
  
cout< < vs[i];   
}

如何使用random_shuffle()处理内置数组 在使用容器代替内置数组时,你不要有什么负担。所有STL算法不仅适用于容器,也适用于序列。因此,你也能将random_shuffle()算法应用于内置数组。只是要注意random_shuffle()的第二个参数要指向数组上界的下一个元素位置:


char carr[4] = {'a', 'b', 'c', 'd'};  
  
random_shuffle(carr, carr+4);     
for (int i = 0; i < 4; i++)  
  cout< < carr[i]; 

到此这篇关于C++ random_shuffle()方法案例详解的文章就介绍到这了,更多相关C++ random_shuffle()方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++ random_shuffle()方法案例详解

本文链接: https://www.lsjlt.com/news/133348.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ random_shuffle()方法案例详解
    假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。 首先,做格式化时,结果...
    99+
    2022-11-12
  • C# DateTime.Compare()方法案例详解
    C#中的DateTime.Compare()方法用于比较两个DateTime实例。它返回一个整数值, <0-如果date1早于date2 0-如果date1与...
    99+
    2022-11-12
  • C# InitializeComponent()方法案例详解
    在每一个窗体生成的时候,都会针对于当前的窗体定义InitializeComponent()方法,该方法实际上是由系统生成的对于窗体界面的定义方法。 //位于.cs文件之中的Ini...
    99+
    2022-11-12
  • C++ pair方法与vector方法案例详解
    一,pair方法 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类型,T2是第二个值的数据类型。 ...
    99+
    2022-11-12
  • C++ cin.get用法案例详解
    与字符串输入一样,有时候使用 cin>> 读取字符也不会按我们想要的结果行事。 例如,因为它会忽略掉所有前导白色空格,所以使用 cin>> 就不可能仅输入一个...
    99+
    2022-11-12
  • C++ template用法案例详解
    有必要记一下这种一眼看上去就很高级的用法。还是编程不够多。都没用过这个。 相信用过c++的人,即便没用过,也肯定都听说过模板类这个词。嗨不巧了,今天讲的就是模板类。 模板是c++支持...
    99+
    2022-11-12
  • C# Console.WriteLine()用法案例详解
    以前用Console.WriteLine()的时候就只会用它直接输出string字符串,但后来发现它还有其它在有些场合下会十分方便的输出方法,这篇就记录一下这些方法的使用吧。 代码格...
    99+
    2022-11-12
  • C++ ostream用法案例详解
    概述 在 C++中,ostream表示输出流,英文”output stream“的简称。在 C++中常见的输出流对象就是标准输出流cout,很少自定义ostream的对象,更多的是直...
    99+
    2022-11-12
  • C# Request.Form用法案例详解
    在CS文件中获得对应页面中的下拉框DropDownList_sitebranch值可以有以下几种方法获得: siteInfo.FZJGID = DropDownList_site...
    99+
    2022-11-12
  • C# DialogResult用法案例详解
    在程序中,经常会弹出一个对话框来让用户填写一些信息,填写完成后,当用户点击“确定”按钮后,在主窗体中进行其他的处理。比如一个简单的例子,在主窗体中有一个菜单,是“增加用户”,当点击这...
    99+
    2022-11-12
  • C# pictureBox用法案例详解
    PictureBox 控件可以显示来自位图、图标或者元文件,以及来自增强的元文件、JPEG 或 GIF 文件的图形。如果控件不足以显示整幅图象,则裁剪图象以适应控件的大小。 本文利用...
    99+
    2022-11-12
  • C++ GetDlgItem用法案例详解
    GetDlgItem的用法小结 GetDlgItem用于获得指定控件ID的窗体指针,函数原型如下: HWND GetDlgItem( HWND hDlg, int nI...
    99+
    2022-11-12
  • C++ odr用法案例详解
    // The main module. File: odr_test1.cpp #include <iostream> void module1_print...
    99+
    2022-11-12
  • C# DateTime日期比较方法案例详解
    之前做到日期时间的时候,有许多格式问题和日期时间比较问题,以及相关条件约束,因为不熟悉这个,浪费许多时间,查找相关资料,记录,以作备用。 1. Convert.ToDateTime ...
    99+
    2022-11-12
  • C++ CopyFile,MoveFile用法案例详解
    1.含义 CopyFile(A, B, FALSE);表示将文件A拷贝到B,如果B已经存在则覆盖(第三参数为TRUE时表示不覆盖) MoveFile(A, B);表示将文件A移动到B...
    99+
    2022-11-12
  • C++中inline用法案例详解
    1 引入inline关键字的原因 在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数,栈空间就是指放置程序的局...
    99+
    2022-11-12
  • C++ pair的用法案例详解
    一、介绍 pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair。当然你也可以自定义一个结构体struct。不过大家都是为了方便,所以就直接用pair了。 pair...
    99+
    2022-11-12
  • C# ExecuteScalar()方法案例讲解
    执行查询,并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。 1、返回的是一个object类型,也就是说是所有数据类型的基类,可根据select所得的第一...
    99+
    2022-11-12
  • C# TreeNode案例详解
    目录添加节点删除修改方法1:方法二:添加节点 private void Form1_Load(object sender, EventArgs e) { tree...
    99+
    2022-11-12
  • C++ namespace案例详解
    在C++语言编写的程序中,变量和函数等的作用范围是有一定限制的。比如,在函数体中定义的一个临时变量就不可以在函数体外使用。为了解决变量和函数等的作用范围,在C++语言中引入了名空间的...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作