STL--vector

struct YU_INFO
{
      ...
}
定义
vector<YU_INFO*> m_Vector;
插入
 YU_INFO* pTemp = NULL;
 pTemp = new YU_INFO; //赋值
 m_Vector.push_back(pTemp);
遍历
 for (vector<YU_INFO*>::iterator itor = m_Vector.begin(); itor != m_Vector.end(); itor++)
 {
   do{
          (*itor)->m_strYuID.c_str()
       }
 }
删除
 YU_INFO *pT = NULL;
   vector<YU_INFO*>::iterator itor;   //迭代器
   for (itor = m_Vector.begin(); itor != m_Vector.end(); )
   {
    pT = (*itor);
    //保存码流头信息
    if(满足条件)
    {
     delete pT;
     pT = NULL;
    itor =  m_Vector.erase(itor);

break;
    }
   }


清除

 long lSize = m_Vector.size();
 if (!m_Vector.empty())
 {
  for (int nIndex = 0; nIndex < lSize; nIndex ++)
     {
           delete m_Vector[nIndex];
           m_Vector[nIndex] = NULL;
     }
   m_Vector.clear();
 }

 

dll里使用vector导致内存泄露的问题

struct st
{
 int i;
 int j;
};
vector<st*> g_stvector;

void fun()
{
 st* pst = new st;
 g_stvector.push_back(pst);

 st *pT = NULL;
 vector<st*>::iterator itor;   //迭代器
 for (vector<st*>::iterator itor = g_stvector.begin(); itor != g_stvector.end();)
 {
  pT = *(itor);
  delete pT;
  pT = NULL;
  itor = g_stvector.erase(itor);
 }
}
上面的fun函数如果通过DLL导出会导致内存泄露,原因是:vector其内存占用空间只会增长,不会减小。比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个,即使clear(),也不能收回内存。这里有一个办法:利用swap函数,我们利用目前的vector构造一个一模一样的vector,他并没有预留空间,于是以前预留的空间也被释放以作他用了,代码如下:
ivec.swap(vector<int>(ivec)); // or vector<int>(ivec).swap(ivec)
或者如下所示 加一对大括号都可以,意思一样的:
{
     std::vector<int> tmp = ivec;  
     ivec.swap(tmp);
}    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值