Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2501|回复: 8
打印 上一主题 下一主题

Qt常见容器使用

[复制链接]

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
楼主
发表于 2017-1-22 10:55:14 | 显示全部楼层
循环排序时注意:如果vec中不含有一条记录,要防止i=0时这种情况还进行排序,就会出异常
  1. //对分组内邮件默认按时间排序
  2.     if (m_vecMailGroupModelData.size() > 0)  //去掉对i=0时还进行排序
  3.     {
  4.         for (int i = 0; i < m_vecMailGroupModelData.size(); i++)
  5.         {
  6.             qSort(m_vecMailGroupModelData[i].vec_mailIds.begin(), m_vecMailGroupModelData[i].vec_mailIds.end(), CMemoryDBManager::compMailTimeDescEx);
  7.         }
  8.     }
复制代码
回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
沙发
发表于 2017-1-23 11:53:58 | 显示全部楼层
QSet
  1. QSet<QuerySummaryInfo>::const_iterator iter = setQuerySummarys.constBegin();
  2.     while (iter != setQuerySummarys.constEnd()) {
  3.         qDebug() << (*iter).mailId << " " << (*iter).data;
  4.         ++iter;
  5.     }
复制代码
回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
板凳
发表于 2017-1-24 12:23:22 | 显示全部楼层
QMap引入 新元素的问题  由于外部还有一个for循环造成 且索引在一直增大,这样会造成内部数据一直增大,如果没有外部循环 即j是定死的,则不会出现内存暴涨
  1. 暴涨版:

  2.     for (int j = 0; j < m_mapMailMemoryData.size(); ++j) {
  3.         for (int i = 0; i < m_mapMailMemoryData[j].vecMailIndexDatas.size(); ++i) {
  4.             if (m_mapMailMemoryData[j].vecMailIndexDatas.at(i).mailId == mailId){
  5.                 return m_mapMailMemoryData[j].vecMailIndexDatas.at(i);
  6.             }
  7.         }
  8.     }

  9. 修改版:
  10. QMapIterator<uint32_t, MemoryMailData> iter(m_mapMailMemoryData);
  11.     while (iter.hasNext()) {
  12.         iter.next();
  13.         for (int i = 0; i < iter.value().vecMailIndexDatas.size(); ++i) {
  14.             if (iter.value().vecMailIndexDatas.at(i).mailId == mailId){
  15.                 return iter.value().vecMailIndexDatas.at(i);
  16.             }
  17.         }
  18.     }
复制代码
回复 支持 反对

使用道具 举报

1228

主题

1997

帖子

7582

积分

认证用户组

Rank: 5Rank: 5

积分
7582
地板
发表于 2017-2-15 11:53:12 | 显示全部楼层
QList删除
  1.    for (auto it = childItems.begin(); it != childItems.end(); /* don't increment here */) {
  2.         if ((*it)->stItemData.id == itemData.id)
  3.         {
  4.             delete (*it);
  5.             it = childItems.erase(it);
  6.             break;
  7.         }
  8.         else
  9.         {
  10.             ++it;
  11.         }
  12.     }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-5-3 14:48 , Processed in 0.057589 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表