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