C++ 我的迭代器发生了什么?

C++ 我的迭代器发生了什么?,c++,stl,map,iterator,C++,Stl,Map,Iterator,嗨,在我的问题中存在一个对象classA,如下所示 typedef-map-myMap static string keys[3] = { "11" , "22" , "33" }; class classA { myMap::const_iterator m_iterators[3]; int classA::SetIterators(const myMap &AllData) } int classA::SetIterators(const myMap &All

嗨,在我的问题中存在一个对象
classA
,如下所示 typedef-map-myMap

static string keys[3] = { "11" , "22" , "33" };

class classA {
   myMap::const_iterator m_iterators[3];
  int classA::SetIterators(const myMap &AllData)
}

int classA::SetIterators(const myMap &AllData)
{
    m_iterators[0]=AllData.find(keys[0]);
    ....
    return VALID;
}
SetIterators
函数中,我想确保映射中是否存在一些键,并将
iterators
设置为它们 当我在
SetIterators
中时,迭代器设置正确。 但在返回后,它们失去了它们的值,并设置为坏的Ptr

我调用
SetIterators
,如下所示

 int classA::BuildView(const myMap &AllData)
 {
      if(SetIterators(AllData)== VALID) 
 }
这是怎么发生的?我怎样才能防止这种情况?
谢谢herzl。

当从映射中添加或删除新值时,迭代器将无效。

这在他真正使用映射时是不正确的。在执行插入和擦除操作后,映射迭代器仍然有效。是的,但这始终发生在返回之后。这不能是其他线程在同一步骤中每次都更改它。您能否显示调用
SetIterators
的代码?因为根据您的描述,问题在于调用方,为什么不演示如何使用该类?了解
AllData
的确切类型会有所帮助。另外,您是否绝对确定迭代器会因为函数返回而变得无效?换句话说,程序的另一部分是否同时访问所有数据?如果是,什么样的访问?其他线程生成此数据,这里我通过refrens获取此数据,但我不认为这是问题所在。我猜您会在调用树的较高位置传入一个
AllData
的临时副本。