最近由于项目需要,进行了一些C++项目的开发。由于以前一直是用C开发,开发过程中难免趟了些小坑,记录如下:
实现一个代码片段要实现vector中一些元素的删除功能,使用到了C++的函数模板remove_if,由于对这个函数不够熟悉,以为它会返回处理过后的vector,继续对这个vector使用触发了BUG,查看了
http://www.cplusplus.com/reference/algorithm/remove_if/
给出的一个代码实现:
template <class ForwardIterator,class UnaryPredicate>
ForwardIterator remove_if (ForwardIteratorfirst, ForwardIterator last,
UnaryPredicatepred)
{
ForwardIterator result = first;
while (first!=last) {
if (!pred(*first)){
*result = *first;
++result;
}
++first;
}
return result;
}
可以了解到它返回指向新的结束位置的iterator,所以如果要清理这个vector要程序员自己进行,可以使用erase(new_end, old_end)完成清理。