一直都没怎么用过STL,迭代器更是极少用到。今天在代码里用到vector,因为要删除其中元素,所以只好用迭代器进行遍历。
vector里放的是一个对象的指针,当满足条件时就删除对象并从vector里将该元素删除。唉,一时犯晕,在操作时竟然先删除vecotr中的元素,然后删除对象,代码片断如下。
std::vector<CGapPoolBase*>::iterator iter;
for (iter = m_subGapPool.begin(); iter!= m_subGapPool.end(); iter++)
{
if ((*iter)->freeSeqGap(pgap))
{
if ((*iter)->isIdle())
{
m_subGapPool.erase(iter);
delete (*iter);
}
return true;
}
}
红色部分代码有问题,那两句话应该调换一个顺序。因为没有用过erease,所以不知道erease后迭代器会指向下一个元素,结果在其他地方找了半天,浪费了不少时间,看来有必要好好修练一下Generic Programming和STL了。
在《The C++ Standard Library》是这么描述erease的,c.erase(pos): Removes the element at iterator position pos and returns the position of the next element.
vector里放的是一个对象的指针,当满足条件时就删除对象并从vector里将该元素删除。唉,一时犯晕,在操作时竟然先删除vecotr中的元素,然后删除对象,代码片断如下。














红色部分代码有问题,那两句话应该调换一个顺序。因为没有用过erease,所以不知道erease后迭代器会指向下一个元素,结果在其他地方找了半天,浪费了不少时间,看来有必要好好修练一下Generic Programming和STL了。
在《The C++ Standard Library》是这么描述erease的,c.erase(pos): Removes the element at iterator position pos and returns the position of the next element.