一个vector容器删除元素的有关问题

一个vector容器删除元素的问题
我这有个函数,实现删除容器指定内容的功能,大伙帮忙看看哪里有问题:

vector<pair<basic_string<TCHAR>,int> > vec;
void DeleteItem(LPCTSTR str)
{
   vector<pair<basic_string<TCHAR>,int> >::iterator itr = vec.begin();
   for( ; itr != vec.end(); ){
     CString tmp = itr->first.c_str();
     if( -1 != tmp.Find(str) ){
       vec.erase(itr); 
       continue;
     }

     itr++;
   }
}

问题描述:
当进入if语句时,第一个元素是可以删除的,但是删除完后会再次进入for里面进行查找,这时候for里面的语句就执行不下去了,vec里面的元素是足够多的。断点放在CString那行,程序走不到那里。
很奇怪的问题,即使我vec里面元素没有了,应该也能进到for里面才是,求解
------解决方案--------------------
该去认真啃《effective stl》了
你正问的和将要问的stl问题,都在上面有答案。
------解决方案--------------------
当你进入if语句以后,执行了continue,程序会跳过itr++,没有递增。所以itr还是指向原来那个元素,但是那个元素已经被删除了,再使用肯定会出错。
------解决方案--------------------
 vec.erase(itr); 

itr都被删除了,还怎么找?