关于映射和迭代器的理论澄清

2024-04-06

如果我有一个带有地图作为私有成员的类,例如

class MyClass
{
  public:
    MyClass();
    std::map<std::string, std::string> getPlatforms() const;
  private:
    std::map<std::string, std::string> platforms_;
};

MyClass::MyClass()
        :
{
  platforms_["key1"] = "value1";
  // ...
  platforms_["keyN"] = "valueN";
}

std::map<std::string, std::string> getPlatforms() const
{
  return platforms_;
}

在我的 main 函数中,这两段代码之间会有区别吗?

Code1:

MyClass myclass();
std::map<std::string, std::string>::iterator definition;
for (definition = myclass.getPlatforms().begin();
     definition != myclass.getPlatforms().end();
     ++definition){
  std::cout << (*definition).first << std::endl;
}

Code2:

MyClass myclass();
std::map<std::string, std::string> platforms = myclass.getPlatforms();
std::map<std::string, std::string>::iterator definition;
for (definition = platforms.begin();
     definition != platforms.end();
     ++definition){
  std::cout << (*definition).first << std::endl;
}

在 Code2 中,我刚刚创建了一个新的地图变量来保存从 getPlatforms() 函数返回的地图。

无论如何,在我的真实代码中(我无法发布真实代码,但它直接对应于这个概念),第一种方式(Code1)会导致运行时错误,无法访问某个位置的内存。

第二种方法有效!

您能否启发我了解这两个不同代码片段之间发生的理论基础?


getPlatforms()按值而不是引用返回映射,这通常是一个坏主意。

您已经举了一个例子来说明为什么这是一个坏主意:

getPlatforms().begin()是映射上的迭代器,在使用迭代器之前该迭代器已经消失并且getPlatforms().end()是来自同一原始映射的不同副本上的迭代器。

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

关于映射和迭代器的理论澄清 的相关文章

  • Windows 10 Mobile (10.0.14393) 地理围栏后台任务 (LocationTrigger)

    自从10 0 14393 周年纪念更新 LocationTrigger似乎不起作用 我有 Windows Phone 8 1 应用程序 也适用于 UWP 应用程序 输出到的便携式库Windows Runtime Component图书馆 w
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • 选择列表逻辑应位于 ASP.NET MVC、视图、模型或控制器中的什么位置?

    我觉得我的问题与这个问题很接近 但我想对这样的代码应该放在哪里进行更一般的讨论 Asp Net MVC SelectList 重构问题 https stackoverflow com questions 2149855 asp net mv
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • 类中不允许使用不完整类型,但类模板中允许使用不完整类型

    以下为无效代码 struct foo struct bar bar x error field x has incomplete type struct bar int value 42 int main return foo x valu
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul
  • 带有私有设置器的 EFCore Base 实体模型属性 - 迁移奇怪的行为

    实体模型继承的类内的私有设置器似乎会导致 EFCore 迁移出现奇怪的问题 考虑以下示例 其中有多个类 Bar and Baz 继承自Foo 跑步时Add Migration多次命令 添加 删除private修饰符 生成的模式在多个方面都是

随机推荐

  • Oracle InvalidOperationException - 尝试从表中选择时

    我有一个参数表 其中有一个参数来说明我的程序是否应该运行 我试图获取该值来检查函数 这是函数 private static bool shouldRun OracleCommand c conn CreateCommand c Comman
  • 如何在单个查询中使用不同参数执行多个联接

    我有两个表 问题 question id 和question exclusion question type question sub type question id 如果我指定 Question type 和 Question sub
  • 如何以编程方式调用视图控制器?

    我已经查看了我能找到的所有关于此问题的教程 但仍然没有答案 我需要从代码中调用另一个视图 我在用UIStoryboards 我通过控制拖动多次改变了视图UIButtons 但现在它必须来自代码 如果这是用户第一次打开应用程序 我尝试从主菜单
  • 加速 matplotlib 散点图绘制

    我正在尝试制作一个交互式程序 主要使用 matplotlib 来制作相当多的点 10k 100k 左右 的散点图 现在它可以工作 但是更改需要很长时间才能呈现 少量的点还可以 但是一旦数量增加 事情就会很快变得令人沮丧 所以 我正在研究加速
  • Activity 和 JobIntentService 生命周期

    我正在运行一个JobIntentService在后台执行任务 使用理由JobIntentService这样用户就可以在操作发生时最小化屏幕 即使 Android 操作系统破坏了该 ActivityJobIntentService仍将继续运行
  • 如何为可变特征创建描述符?

    的文档CBMutableDescriptor initWithType value 表示为类型参数传递 标识特征的 128 位 UUID 然后它继续说你应该只使用其中之一CBUUIDCharacteristicUserDescription
  • 手动编辑 *.designer.cs 文件

    我知道 designer cs文件包含由 Visual Studio 中的可视表单设计器生成的数据 不过 我还有一些额外的方法 我想将它们放入 designer cs文件 因为它们负责较低级别的表单处理 例如 我的视觉状态管理器的一部分 T
  • Python 找不到 Pyomo

    我很困惑为什么 Python 不导入 pyomo 我可以找到该目录并看到它已安装 234 pyomo user pip show pyomo Name Pyomo Version 5 1 1 Summary Pyomo Python Opt
  • Jquery AJAX post 更新数据库

    我在 HTML 表单中使用以下代码 尝试制作一种 彩票刮刮票 类型的效果 有一个网格 每个项目都有一个来自数据库的动态数字 单击正方形会调用 clickme 函数 进行 db 调用 然后更改图像 我只是在第一部分尝试更新数据库 我的 PHP
  • ControllerPlugin 类中的 ZF2 getServiceLocator

    我正在尝试在插件类中获取服务定位器 实体管理器 我怎样才能得到它 在我的控制器中我得到的是这样的 public function getEntityManager if null this gt em this gt em this gt
  • 我可以在 SQL Server 中选择 0 列吗?

    我希望这个问题比类似的问题好一点创建一个没有列的表 https stackoverflow com questions 2438321 create a table without columns 是的 我问的是一些最让人觉得毫无意义的学术
  • 表不必要的冗余

    我的物品列出如下 当然这只是一个总结 但我正在使用 详细信息 表中显示的方法来表示一种 继承 类型 可以这么说 因为 项目 和 可下载 将是相同的 除了每个都有一些相关的附加字段只对他们而言 我的问题是在这个设计模式中 这种事情在我们的项目
  • 当前不会命中断点。该文档尚未加载任何符号

    我用谷歌搜索了这个特定问题 但似乎找不到可行的解决方案 症状 在 Web 应用程序项目中的 aspx 页面的代码隐藏中添加断点后 该断点在页边空白处显示为一个空心的红色圆圈 圆圈右下角有一个用黄色三角形括起来的感叹号 将鼠标悬停在断点上时
  • 使用自定义对象的 JTable、JComboBox

    您好 如果您将 JComboBox 放入 JTable 中并将 String 数组放入 JComboBox 中 则一切正常 如果您将自己的数据类型放入 JComboBox 则在同一列中选择值会变得很复杂 这是官方示例 http docs o
  • 在单调递增然后递减的序列 cera 中查找一个数

    查找单调增加然后单调减少的序列中的最大值或最小值可以在 O log n 内完成 但是 如果我想检查一个数字是否存在于这样的序列中 这也可以在 O log n 中完成吗 我认为这是不可能的 考虑这个例子 1 4 5 6 7 10 8 3 2
  • 如何创建元组数组?

    我知道要在 C 中创建元组 我们使用以下格式 Tuple
  • Azure SQL 数据库 Bacpac 本地还原

    我使用 Azure 管理控制台中的 导出 选项创建了 Azure SQL 数据库的 BACPAC 备份 将其下载到我的计算机后 我对如何将其恢复到本地 SQL Server 实例有点困惑 我遇到了 DacImportExportCli 工具
  • 在 Visual Studio 中使用 FFmpeg

    我正在尝试在 Visual Studio 2010 的 C 项目中使用 FFmpeg 我想将这些库作为静态链接文件包含在内 简单的程序如libavcodec api example c http cekirdek pardus org tr
  • 寻找Excel自定义函数工具提示

    这个问题已经被asked https stackoverflow com questions 4262421 how to put a tooltip on a user defined function before https stac
  • 关于映射和迭代器的理论澄清

    如果我有一个带有地图作为私有成员的类 例如 class MyClass public MyClass std map