随机分布应该通过引用传递还是作为 C++ 中的对象成员

2023-12-14

假设我们只实例化少于 20 个 Blob 类对象,并且考虑到效率(执行时间)和内存管理问题,是否有最佳选择:

  • 将随机生成器和生成的分布设置为私有类成员,例如:

    class Blob {
    private:
    std::mt19937 engine;
    std::uniform_real_distribution<double> R_distribution;
    std::binomial_distribution<int> B_distribution;
    }
    

    并直接在 Blob 方法中使用它们。因此,当我们调用分发时,我们也会更改作为成员的引擎的状态。

  • 或者将随机生成器设置为私有类成员并通过引用方法传递分布?例如:

    class Blob {
    private:
    std::mt19937 engine; //engine
    }
    
    void Blob::run() {
    int blabla = 10;
    std::uniform_real_distribution<double> R_distribution(0, 10);
    do_something(blabla, R_distribution);
    ...
    }
    

虽然通过引用传递通常会降低开销,但在这种情况下特别重要吗?当多次调用分布(10^9 或更多)时,总体问题如何扩展?


分布是cheap并且可以随意创建/丢弃。发动机则不然。理想情况下,您应该只初始化您的 PRNGonce并确保它是thread_local如果你的程序是多线程的。 PRNG就像std::mt19937体积庞大并且具有较大的内部状态。考虑做这样的事情:

inline auto global_rng() -> std::mt19937& {
    thread_local std::mt19937 e{ get_seed() };
    return e;
}

void foo() {
    thread_local std::uniform_real_distribution<double> d; 
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机分布应该通过引用传递还是作为 C++ 中的对象成员 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 如何通过从字母数字字符中采样来创建随机字符串?

    我尝试编译以下代码 extern crate rand 0 6 use rand Rng fn main rand thread rng gen ascii chars take 10 collect
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • C++:switch 语句在右大括号之前缺少分号

    为了未来读者的利益和我自己的理智 我想绝对清楚地表明 switch没有a的语句default案例 由于涵盖了所有案例 或顺序if elseif else最后的 else 不应执行任何操作 不得省略 并包含对此效果的注释 请参见示例 然而 每
  • 在 Oracle SQL 中处理日期

    我在使用 SQL 方面非常陌生 我尝试做的是仅使用月份和年份选择 waterUsage 和 electrcityUsage 并选择上一年的 waterUsage 和 electrcityUsage 然而 我似乎无法找出使用日期来完成这项工作
  • Swift:iOS 12.2 应用程序启动时崩溃

    更新 Xcode 和 swift 5 后 在 iOS 12 2 上启动模拟器后 我的应用程序在启动时崩溃 但在早期版本的 ios 如 12 0 中 应用程序可以正常工作 我在真实设备 ios 12 0 1 上启动应用程序并且应用程序正常工作
  • UITextView 应该检测链接,但否则应该将触摸传播到下面的视图

    我有一个文本视图 我想在其中检测链接 但是当触摸点处没有链接时 它应该将触摸传播到下面的视图 目前没有 它将包含在表格视图单元格中 如果用户点击链接 它应该进行交互 它可以工作 但是当点击另一个点时 它应该选择表格视图单元格 我需要文本不可
  • 如何使用win32com从word文档中按颜色获取文本?

    我有一个包含几个表格的word文档 每张桌子有两种颜色 黑色和红色 我想按颜色从 Word 文档表中的单元格中获取文本 我找到了一个方法 但我认为效率很低 以下代码从单词表单元格中获取文本 并用它的颜色打印每个单词 import os sy
  • 由于 .NET 运行时中的内部错误,该进程被终止

    我正在使用 WPF 不知何故今天我得到了这个新的崩溃信息 Description The process was terminated due to an internal error in the NET Runtime at IP 6A
  • 阻止 AlertDialog 在单击肯定按钮时关闭

    我正在尝试设置一个自定义 AlertDialog 它有 2 个按钮 取消按钮和肯定按钮 我需要做到这一点 以便单击肯定按钮后 我可以更改文本 而不关闭对话框 大致流程是肯定按钮会显示 发送 单击后它将更改为 发送 然后代码将向我们的服务器发
  • Android - 在外部应用程序中打开pdf

    我的应用程序资产目录中有一个 pdf 文件 我想使用外部应用程序打开该文件 因此编写了我的内容提供程序 我正在尝试使其工作 但没有任何结果 这是代码 内容提供商 package package name import java io Fil
  • Nuget ITfoxtec SAML 和 Angular

    我对 nuget 示例中描述的功能和我的案例 特别是 core 和 Angular 中描述的功能有疑问 我有一个带有 angular4 的前端 所有请求都通过那里 我用它重定向到 Idp 表格 他再次打电话给我 将断言传递给我 如何使用 A
  • 如何将字节数组转换为变体

    如何将字节数组转换为 Variant 我有一个 WebService 应该接收一个字节数组 但它只接受 VARIANT 类型的变量 我想知道如何转换以便将其作为 Web 服务的参数传递 谢谢 根据评论线索 您需要创建一个SAFEARRAY字
  • 当前的 Ruby 方法是通过 super 调用的吗?

    在运行时的方法中 有没有办法知道该方法是否已被调用super在子类中 例如 module SuperDetector def via super what goes here end end class Foo include SuperD
  • 如何使用 ng2-charts 在圆环图上设置切口?

    我需要一些帮助来了解如何使用 ng2 charts 在我的圆环图上设置配置选项 特别是 我想在图表上设置剪切属性 我已经阅读了所有文档图表js and ng2 图表 但遗憾的是没有找到可行的解决方案 控制台抛出的错误是 输入 选项 切口 数
  • std::future 可以比 std::promise 更长久吗?

    铿锵声线程消毒剂在以下代码中报告数据争用 include
  • 如何将 SourceDataLine 的内容写入文件?

    我正在修改一个播放音频数据的应用程序 以将数据写入文件 正如当前实现的那样 字节数组是动态填充的 每次填充时 该缓冲区的内容都会写入 SourceDataLine 中 我基本上想将该缓冲区写入指定格式的文件中 我已读完这个官方教程并遇到了用
  • 什么是无序动态初始化、偏序动态初始化和有序动态初始化

    我正在读动态初始化但无法完全理解 因为缺少示例 什么是无序动态初始化 部分有序动态初始化和有序动态初始化 谁能提供相同的信息 这将使理论更加清晰 动态初始化 动态初始化涉及未初始化的非局部变量constexpr表达式 int foo int
  • 在ggplot2中复制离散轴

    ggplot2 的开发版本 2 1 0 9001 提供了一个很好的速记方法 用于创建与主轴重复的辅助轴if原始轴是连续的 devtools install github hadley ggplot2 library ggplot2 ggpl
  • 我可以让 Reason+React 从 CDN 导入 React 模块吗?

    使用 Reason 和 React 构建组件总是会给我一个 react 的模块导入语句 如果 React 包含在 CDN 中 则无法找到该语句 有解决办法吗 我试图定义window react React在index html 中没有成功
  • 创建以图像为节点的图表

    我正在创建一个以节点作为图像的图表 图片来自http matplotlib sourceforge net users image tutorial html 我想创建一个圆形布局 带有节点zero位于中心 Egdelist 为 0 1 0
  • 从 JAX-WS 生成的代码访问 Web 服务时如何指定主机和端口?

    我有一个用于 Web 服务的 WSDL 文件 我正在使用 JAX WS wsimport 生成 Web 服务的客户端接口 我事先并不知道 Web 服务将在哪台主机上运行 但我几乎可以保证它不会http 本地主机 8080 如何在运行时指定主
  • 随机分布应该通过引用传递还是作为 C++ 中的对象成员

    假设我们只实例化少于 20 个 Blob 类对象 并且考虑到效率 执行时间 和内存管理问题 是否有最佳选择 将随机生成器和生成的分布设置为私有类成员 例如 class Blob private std mt19937 engine std