处理 C++ 类中的惰性计算

2024-05-25

假设我有一堂课:

class NumberCollection
{
public:
    typedef std::set<int> SetType;
    typedef SetType::iterator iterator;
    void insert(int n);

    iterator begin();
    iterator end();
    size_t size() const;

    iterator difficultBegin();
    iterator difficultEnd();
    size_t difficultSize() const;    

private:
    SetType easySet_, difficultSet_;
}

Where insert()添加一个元素到easySet_. difficultSet_的成员根据以下成员的变化而变化easySet_.

我遇到的问题是,多次插入意味着difficultSet_不断地重新计算。所以我想要difficultSet_延迟计算(即仅当difficultBegin(), difficultEnd(), or difficultSize()叫做)。问题是,那么我实际上必须做difficultSet_ into a mutable因为否则difficultSize()无法对其进行操作。

所以现在我的班级声明看起来像

class NumberCollection
{
public:
    typedef std::set<int> SetType;
    typedef SetType::iterator iterator;
    void insert(int n);

    iterator begin();
    iterator end();
    size_t size() const;

    iterator difficultBegin();
    iterator difficultEnd();
    size_t difficultSize() const;    

private:
    SetType easySet_; 
    mutable SetType difficultSet_;
    mutable bool upToDate_;
}

但我觉得这是一个糟糕的设计。有没有更好的办法?


这完全就是这样做的方法。 Const 可以表示二进制 const,也可以表示概念上的 const。使用可变意味着你正在做后者,这很好。

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

处理 C++ 类中的惰性计算 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • 解码 JavaScript Web 令牌 (JWT) 的到期日期?

    我无法理解应用程序中嵌入的 JWT 的到期日期格式 例如 1473912000 这翻译成什么 1473912000 毫秒 某个 x 日期 任何帮助将不胜感激 正如詹姆斯所指出的 该数字是自 1970 年 1 月 1 日以来的秒数 这被转换成
  • 想要并行运行非线程安全库 - 可以使用多个类加载器来完成吗?

    我从事的一个项目中 我们使用的库不能保证线程安全 实际上也不是 并且在 Java 8 流场景中是单线程的 它按预期工作 我们希望使用并行流来获得容易实现的可扩展性成果 不幸的是 这会导致库失败 很可能是因为一个实例干扰与另一实例共享的变量
  • 使用 VBA 将数据从 Excel 导出到现有 PowerPoint 幻灯片

    我正在编写一个小型 excel 插件来进行一些简单的数据分析 但不幸的是我不是 VBA 程序员 到目前为止我已经做了什么 从巨大的 Excel 工作簿中获取数据并执行计算 将结果写入预先格式化的 Excel 骨架 文件 我接下来想要做什么
  • 即使不改变对象和数组,也无法更改减速器中的嵌套对象

    我正在尝试更新减速器内的状态 我知道我不应该改变对象或嵌套对象 所以我使用map用于数组或对象的对象扩展 但似乎我无法真正更改深层嵌套的值 除了我无法更改状态这一事实之外 我真的不喜欢代码的外观 尤其是仅更改一个属性所需执行的循环数量 我觉
  • 如何在winform的中心设置控件?

    您好 我正在尝试在表单中心设置控件 即标签或文本框 当我最大化该形式时我需要这个 我可以静态或动态设置它吗 大家有什么想法请尽快告诉我 将控件放在中心并设置Anchor财产给None
  • 单元测试魔术方法

    当涉及到 PHP 中魔术方法的单元测试实现时 调用这些方法的推荐方法是什么 我看到三个可用选项 显式 直接调用它们 object gt get someValue 间接调用它们 使用任何旨在触发它们的操作 object gt someVal
  • 命令行字符串的最大长度

    在Windows中 命令行字符串的最大长度是多少 意思是如果我指定一个在命令行上接受参数的程序 例如abc exe name abc 我编写的一个简单的控制台应用程序通过命令行获取参数 我想知道最大允许数量是多少 来自微软文档 命令提示符
  • 能够在 WPF 网络浏览器中支持 Html5

    我的WPF浏览器不支持网页上的html5元素 我不知道如何实现对它的支持 我确实安装了 IE9 并且可以看到使用 IE 浏览的 html5 元素 非常感谢任何关于如何添加对 html5 支持的帮助 我实际上自己找到了解决方案 一切都在这个页
  • Web 应用程序架构 - 需要作业/任务队列吗?

    我目前正在设计一个 Web 应用程序 该应用程序将允许用户安排将针对 HTTP API 代表他们 执行的任务 这些任务可以重复出现 并且可用于调度的最小时间分辨率为一分钟 由于任务的性质 我认为异步执行它们是有意义的 但是 这部分的架构应该
  • 如何将一个div的内容克隆到另一个div

    我想使用jquery克隆将选定div的内容复制到另一个div 但我不想将它附加到任何地方 我的意思是 当我们用 jquery 克隆一个 div 时 如果我错了 请纠正我 我们必须设置它的位置 它将动态创建一个显示的新分区 但我想获取所选di
  • 在 powershell 3 中美化 json

    给定一个标准 json 字符串值 jsonString baz quuz cow moo cud foo bar 我怎样才能让这一切都漂亮的换行符 最好没有强力正则表达式 到目前为止我发现的最简单的方法是 jsonString Conver
  • Monitor.TryEnter(object) 和 Monitor.TryEnter(object, ref bool) 之间存在什么重要区别?

    这些代码片段的行为似乎应该相同 1 Monitor TryEnter 对象 if Monitor TryEnter lockObject try DoSomething finally Monitor Exit lockObject 2 M
  • 秋千布局:垂直流

    我应该使用什么 LayoutManager 来实现 FlowLayout 的转置版本 本质上 我想要一个垂直列表 如果它不能在一列中容纳所有组件 那么它会占据多列 item 1 item 2 item 3 item 4 item 5 ite
  • Java获取调用页面的URL

    为了让您了解情况 我们使用基于 Tomcat 6 0 29 的自定义服务器 我们正在使用 Java 和 Spring 进行开发 假设我有一个链接 您可以从http localhost 显示 http localhost display to
  • 将 HTML 导出为 PDF 时出现中文和日文字符编码问题

    我运行一个基于 Web 的时间线制作工具 让用户可以用 HTML JavaScript 创建时间线 然后将其导出到 PDF 文件以便在完成后进行打印 我有几个用户报告了当时间线包含某些 Unicode 字符时将时间线导出为 PDF 时出现的
  • Webrtc 重新协商,Firefox 到 Chrome,反之亦然,不更新流

    我已经成功建立对等连接 但我无法在 Chrome Firefox 上进行正确的重新协商 我已按照重新协商的步骤 将相机 视频更改为屏幕共享时 更新流 曲目 添加 删除 Changer 这击中了需要谈判 改变者 创建报价 更改者 设置本地描述
  • 在S3客户端android中制作私有图像的ImageGallery

    我正在尝试在 Android 应用程序中创建 S3 Bucket 的 imageGallery 我的图像是私人的 所以我不会为每个图像提供任何特定的链接 对于此类私人图像 亚马逊有一个链接生成器 s3Client generatePresi
  • 在 Ruby 中将多个代码块作为参数传递

    我有一个需要代码块的方法 def opportunity opportunities 1 if yield performances 1 end end 我这样称呼它 opportunity some array empty 但是我如何传递
  • “威胁已经被清除了。”在测试中测试在后台线程上触发委托的代码

    我有一些旧代码正在尝试为其编写测试 该代码解析日志文件 在后台线程上 完成后触发传入的委托 i e public delegate void finread LogData l LRParseState l string e void Th
  • 处理 C++ 类中的惰性计算

    假设我有一堂课 class NumberCollection public typedef std set