关于CLISTCTRL的删除和vector的删除,必须倒序删除

有个需求是要删除选中项。看看CListCtrl有个DeleteItem(),就用它了。得到所有选中项的index,挨个删。只有一个选中的时候没问题,有多个的时候就删错了,有时候还弹出那个永远点不发送的框。
这个删除有个陷阱,那就是每删除一个,后面项的index就要减1.挨着删的时候,删了前面的,后面的index就都错位了,所以再用原来得到的 index删就不行了。当删到最后,超出了项总数时就弹框了。知道了原因就好办了,倒着删,先删后面的影响不到前面

必须倒序删除

    vector<project_data>::iterator iter = gZJHome->m_project->m_vecProjects.begin();
    int nCount = m_list_ret_.GetItemCount();
    for (int i = nCount - 1; i >= 0; --i)    //必须倒序删除
    {
        if (m_list_ret_.GetCheck(i))
        {
            m_list_ret_.DeleteItem(i);
            gZJHome->m_project->m_vecProjects.erase(iter + i);
        }
    }
for (int i=nCount-1;i>=0;i--)
{
if(v[i])m_list.DeleteItem(i);
}   
}
顺便说一下vector的删除,也有同样的问题,也要倒着删。记录好哪些项该删后
std::vector<int>::iterator it=m_vint.end();
it--;
for (int n=m_vint.size()-1;n>=0;n--,it--)
{
if(v[n]){
m_vint.erase(it);
}
}

  

原文地址:https://www.cnblogs.com/XiHua/p/13730730.html