std::list<int>::iterator it;
for(it = m_list.begin(); it != m_list.end(); it++)
{
if( ((*it) > 100)&&((*it) < 200) )
m_list.remove( (*it) );
}我的问题是 m_list.remove( (*it) ); 之后 it 会指向哪个元素?
需不需要调用 it--;像这样遍历 list , 删除一些元素, 正确的代码应该是怎么样的.
for(it = m_list.begin(); it != m_list.end(); it++)
{
if( ((*it) > 100)&&((*it) < 200) )
m_list.remove( (*it) );
}我的问题是 m_list.remove( (*it) ); 之后 it 会指向哪个元素?
需不需要调用 it--;像这样遍历 list , 删除一些元素, 正确的代码应该是怎么样的.
for(it = m_list.begin(); it != m_list.end(); it++)
{
if( ((*it) > 100)&&((*it) < 200) )
m_list.erase(it);
}
for(it = m_list.begin(); it != m_list.end(); it++)
{
if( ((*it) > 100)&&((*it) < 200) )
m_list.erase(it);
}
void remove(const _Ty& _Val_arg)
{
const _Ty _Val = _Val_arg; // in case it's removed along the way
iterator _Last = end();
for (iterator _First = begin(); _First != _Last; )
if (*_First == _Val)
_First = erase(_First);
else
++_First;
}
从源码看remove不满足你的要求,他会删除所有值为_Val_arg的元素, 而erase只删除一个,且删除后自动增加指向下个
iterator erase(const_iterator _Where)
{ // erase element at _Where
_Nodeptr _Pnode = (_Where++)._Mynode(); if (_Pnode != _Myhead)
{ // not list head, safe to erase
_Nextnode(_Prevnode(_Pnode)) = _Nextnode(_Pnode);
_Prevnode(_Nextnode(_Pnode)) = _Prevnode(_Pnode);
this->_Alnod.destroy(_Pnode);
this->_Alnod.deallocate(_Pnode, 1);
--_Mysize;
}
return (_Make_iter(_Where));
}