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

时间:2014-09-27 12:28:49

标签: c++ map reference iterator containers

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

引用来自it->second形式的迭代器,即it是指向具有正确map的{​​{1}}元素的迭代器。< / p>

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

所以我的问题是:

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

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

2 个答案:

答案 0 :(得分:3)

1)只要在bool标志为true时使用引用,并且未从地图中删除引用的对象。

2)虽然我称之为技术上有效,但我不会这样做。我将传递一个指向该类的指针而不是bool和引用,nullptr表示在地图中找不到类实例。

3)是的,修改引用/指向的实例将修改地图中的对象;只要你沿途的某个地方不小心制作一个对象的副本,现在指的是副本,而不是地图中的原始对象。

答案 1 :(得分:0)

  

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

没有。您无法创建&#34;无效的参考&#34;如果没有对象可以参考;因此,在这种情况下你需要乱用一个虚拟对象。

返回一个指针。它更简单,更小,更不令人惊讶,并且(最重要的是)如果没有任何对象可以合理地为空。

  

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

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