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
的临时副本。