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