我是靠谱客的博主 感性朋友,最近开发中收集的这篇文章主要介绍remove、erase,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

remove:

remove不是真正的删除,删除后数量并没有变化。
它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器。
而且没有办法从一个迭代器获取对应于它的容器

实现

  • remove会用需要保留的数据覆盖掉前面需要删除的数据。然后返回一个需要被删除开始位置的迭代器。
    所以通常需要结合erase使用:
v.erase(remove(v.begin(),v.end(),1999),v.end());

如果你想删除带表达式的,那么就需要 erase和remove_if的配合


删除导致迭代器失效

以list为例,当执行container.erase(it)时,确实第一个满足条件的元素删除了,但这时it指针已经被删除了,
它也不指向任何元素了,所以也只能到此为止了

list<int>::iterator it;
for (it = lt.begin(); it != lt.end(); ) {
if (*it % 2 == 0)
lt.erase(it++); //这里是关键
else
++it;
}

erase:

它删除的只是数据,并没有减小容器的容量。


为了避免内存的浪费,你会需要一种方法来删除不必要的容量

vector<node> (test).swap(test);

在上述表达式中,vector (test)会通过拷贝构造生成一个临时变量。而且只会为拷贝的元素分配所需要的内存。
在交换完成之后,临时变量会被析构释放。


清除容器

1.我们也可以上面的方法清除容器

vector<int>().swap(v);

效果等同于:清除掉元素并释放内存。。

2.通过clear

v.clear();

只是清除掉元素。

转载于:https://www.cnblogs.com/Przz/p/6591010.html

最后

以上就是感性朋友为你收集整理的remove、erase的全部内容,希望文章能够帮你解决remove、erase所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部