这是操作C++容器元素的正确方法吗

Is this a correct way to manipulate the elements of a C++ container?

本文关键字:方法 元素 操作 C++      更新时间:2023-10-16

我有一个形式为map<long, class>map,我在long上搜索一个元素,返回形式为pair<bool, class&>的结果-布尔表示引用是否有效。

引用来自形式为it->second的迭代器,其中it是指向具有正确longmap元素的迭代程序。

然后,我在另一个函数中继续操作对类实例的引用。

所以我的问题是:

  • 这是返回引用的有效方法吗
  • 操纵被引用的对象会改变地图中包含的元素吗

如果这些问题看起来很愚蠢,请提前道歉:我以为答案很简单,但我的代码行为不端,所以我正在努力填补所有可能的空白。

1)只要引用仅在bool标志为true时使用,并且被引用的对象不会从映射中移除。

2) 虽然我认为这在技术上是有效的,但我不会这样做。我会传递一个指向类的指针,nullptr表示在映射中找不到类实例,而不是布尔和引用。

3) 是,修改引用/指向的实例将修改映射中的对象;只要在这个过程中,你没有意外地复制对象,并且现在引用的是副本,而不是地图中的原始对象。

这是返回引用的有效方法吗?

没有。如果没有可引用的对象,则不能创建"无效引用";因此,在这种情况下,您需要处理一个要引用的伪对象。

返回一个指针。它更简单、更小、不那么令人惊讶,而且(最重要的是)如果没有对象可以指向,它可以合法地为null

操纵被引用的对象会改变地图中包含的元素吗?

是;可以使用对map元素的引用或指针来操作该元素。