STL

《Effective STL》

9《慎重选择删除元素的方法》

Posted by Liangjf on April 9, 2019

条目九《慎重选择删除元素的方法》

不同容器删除元素的方法是有区别的。

对于删除容器里的一个元素 序列容器( string, vector, deque)最高效的方法是erase-remove。

list最高效的方法是remove。

关联容器没有remove成员函数,只有erase,直接用erase函数来删除元素。

若删除容器里符合一个判别式的元素: 序列容器( string, vector, deque)最高效的方法是erase-remove_if。

list最高效的方法是remove_if。

关联容器的简单方法: 利用remove_copy_if把我们需要的值复制到一个新容器中,然后把原来容器的内容和新容器的内容相互交换。

高效方法: 迭代循环遍历容器,对符合要求的元素做删除操作。(需要注意在容器删除时,迭代器会失效,因此,需要在erase时,同时对itr++,就是在删除元素的副作用是让迭代器同时移动到下一个好的迭代器位置)

特别的。如果想对容器删除元素的同时写入日志,那么对于序列容器( string, vector, deque, list)就不能使用erase-removeif,因为这两个函数不能调用写日志操作。

这时候的做法是: 自己写个遍历容器删除元素并写日志的函数。 (需要特别注意的是,对于序列容器,删除迭代器会使迭代器完全失效,包括当前和后面的)