工作了,使用STL的次数变得很多,我是新手,虽然努力的看过STL的源码,但是很多的东西都没有看懂,慢慢来吧。
昨天做项目的时候遇到了map遍历的事情查了一下便了解的记录下来。
这个删除有两种方法:
1,
std::map<int, FriendWidget*>::iterator iter;
for(iter=m_FriendInfoMap.begin();iter!=m_FriendInfoMap.end();)
{
if(iter->second->getSelectedState())
{
FriendModule::instance().requestFriendRemove(iter->first);
int nIndex = m_pFriendList->getIndex(iter->second);
m_pFriendList->removeItem(nIndex);
m_FriendInfoMap.erase(iter++);
}
else
{
iter++;
}
}
m_FriendInfoMap.erase(iter++);里的i++操作主要做三件事情:
1、首先把i备份一下。
2、把i加上1。
3、返回第一步备份的i。
2,
std::map<int, FriendWidget*>::iterator iter;
for(iter=m_ApplyInfoMap.begin();iter!=m_ApplyInfoMap.end();)
{
if(iter->second->getSelectedState())
{
FriendModule::instance().requestFriendIgnore(iter->first);
int nIndex = m_pApplyList->getIndex(iter->second);
m_pApplyList->removeItem(nIndex);
iter =
m_ApplyInfoMap.erase(iter
);
}
else
{
iter++;
}
}
}
在erase(iter)的时候iter会失效,所以不能再用其操作,不然会崩掉。
注意 for循环里边没有了iter++,还有就是erase的返回值是指向删除的下一个元素的迭代器,