分类: C/C++
2010-05-10 11:16:00
很普通的算法,在一个循环中检查每个元素,判断条件,如果为真,就删除这个节点,再继续循环.看似简单,但是却一个不大不小的陷阱,这种小问题的结论,总是记不住,每次遇到的时候,都得写一个测试程序来验证,干脆总结一下,做个结论
最简单的方法
std::remove_if(_First, _Last, Predicate)
STL是用模板实现,简单高效,但是很多情况下,需要在循环中处理其他逻辑,不能直接使用这个函数
用erase删除
erase有两种原型,删除一个节点和区段删除,对于vector和list,这个操作的定义都是相同的
template< class _TYPE, class _A> iterator vector::erase(iterator Iterator );
iterator _Last = end(); for (iterator _First = begin(); _First != _Last; ) { if (*_First == _Val) _First = erase(_First); else ++_First; }