map容器的循环删除一直是一个容易出问题的地方,在删除成功之后iterator会自动往下移。
未避免涉及到这些容易混淆的问题,在删除之前先用一个Iterator来记录其下一个元素。如下:
- // remove extra windows
- video_wnd_map_t::iterator it = m_video_wnd_map.begin();
- while (it != m_video_wnd_map.end())
- {
- video_wnd_map_t::iterator it_next = it;
- ++it_next;
- if (config_map.find(it->first) == config_map.end())
- {
- need_recalc_layout = true;
- video_wnd_list_t::iterator itl = it->second;
- CMJPEGVideoWnd* pWnd = *itl;
- pWnd->Close();
- m_video_wnd_to_del.push_back(pair<CMJPEGVideoWnd*, time_t>(pWnd, time(NULL)));
- m_video_wnd_list.erase(itl);
- m_video_wnd_map.erase(it);
- }
- it = it_next;
- }
安全删除Map容器元素
本文介绍了一种在C++中安全地从map容器中删除元素的方法。为了避免删除过程中迭代器失效的问题,通过使用一个额外的迭代器来指向待删除元素的下一个元素,从而确保了循环的正确性和代码的稳定性。
4525

被折叠的 条评论
为什么被折叠?



