• 关于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);
    }
    }
    

      

  • 相关阅读:
    归并排序
    mysql 基本查询
    APP版本升级
    top命令详解
    iptables原理详解
    Linux--iptables常用命令
    iptables语法常用命令总结(表格)
    iptables原理--图示理解
    GIT的Windows客户端使用
    Linux下GIT服务器端和客户端搭建
  • 原文地址:https://www.cnblogs.com/XiHua/p/13730730.html
Copyright © 2020-2023  润新知