关于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);
        }
    }
复制代码

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}
}

 

  

 

posted @   曦花  阅读(356)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示