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 iterL;   //迭代器
   for (iterL = m_Vector.begin(); iterL != m_Vector.end(); )
   {
    pT = (*iterL);
    //保存码流头信息
    if(满足条件)
    {
     delete pT;
     pT = NULL;
    itor =  m_Vector.erase(iterL);

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);
}    

你可能感兴趣的:(struct,vector,null,delete,iterator)