vector容器删除元素的几种简单方法(详细实用)

这篇具有很好参考价值的文章主要介绍了vector容器删除元素的几种简单方法(详细实用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、直接删除法

(1)使用 vector库函数“erase”删除使用erase函数后容器size自动-1

 int removeElement(vector<int>& nums, int detarget) {
        for (int i = 0; i < nums.size(); i++){
            if(nums[i] == detarget){
                nums.erase(nums.begin() + i); 
                i--; //由于容器size-1,还按原来的i的话相当于自动右移一位而漏掉一个元素
            }
        }
        return nums.size();      
    }

(2)使用 vector库函数“swap和pop_back()",由于pop_back删除的是最后一个元素,所以先移位再删除

 int removeElement(vector<int>& nums, int detarget) {
        for (int i = 0; i < nums.size(); i++){
            if(nums[i] == detarget){   
                swap(nums[i], nums[nums.size() - 1]); //将要删除的元素交换到最后
                nums.pop_back(); 
                i--; //这里的i--与上面的作用一样
            }
        }
        return nums.size();      
    }

二、遍历覆盖法

如果从数组的角度理解,因为数组存储的内容在地址上是连续的,要移除目标元素,就没有库函数可以使用,那就需要对其他元素进行处理,进行覆盖前移,比较暴力的思路是发现目标元素后,将后面的所有元素都前移覆盖原来的元素,这种方法需要两个for循环,时间复杂度为O(n2),这里不详细讲这种写法。
覆盖的角度思考,我们可以通过一次遍历把非目标元素全部前移覆盖到前半部片

int removeElement(vector<int>& nums, int detarget) {
         int size = 0;
        for(auto x : nums)  //遍历全部元素
            if(x != detarget)  nums[size++] = x;//如果不是要删除的目标元素,把它前移覆盖到前半部分
        return size;  //这里的size即为删除后的容量大小
    }

三、相向双指针法

(1)使用vector库函数swap,通过有两个指针和一个for循环将所有元素分为两个部分,
左端的指针(快指针)控制前半部分的边界,swap后前半部分全部是要保留的元素
右端的指针(慢指针)控制后半部分的边界,swap后后半部分全部是要删除的元素

//时间复杂度:O(n)
//空间复杂度:O(1)
 int removeElement(vector<int>& nums, int detarget) {
        int j = nums.size() - 1; 
        for (int i = 0; i <= j; i++) {
            if (nums[i] == detarget) {  
                swap(nums[i--], nums[j--]); //注意这里的i--,j--,代表先交换再移动,而不是先移动再交换
                //i--的原因:如果发生交换的两个元素全是要删除的目标元素,这样不会把换过来的漏删
            }
        }
        return j + 1; //j+1就是删除完的size大小
    }

ps:上面几种方法只给出了核心算法的代码,具体问题做出相应改动即可文章来源地址https://www.toymoban.com/news/detail-414845.html

到了这里,关于vector容器删除元素的几种简单方法(详细实用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Mysql系列】mysql中删除数据的几种方法

    在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据。在执行删除操作时,需要谨慎,以免误删重要数据。 以下是MySQL中删除数据的几种方法: DELETE语句 DROP TABLE语句 TRUNCATE TABLE 使用外键约束 DELETE语句是最常用的删除数据方法之一。它允许您根据

    2024年02月05日
    浏览(40)
  • C#删除字符串最后一个字符的几种方法

    字符串:string s = \\\"1,2,3,4,5,\\\" 目标:删除最后一个 \\\",\\\" 方法一: s = s.Remove(s.LastIndexOf(\\\",\\\"), 1); ; //移除掉最后一个\\\",\\\" 方法二:用的最多的是Substring,这个也是我一直用的 s = s.Substring(0,s.Length - 1) 方法三:用TrimEnd,这个东西传递的是一个字符数组 s=s.TrimEnd(\\\',\\\') //如果要删除\\\"5,\\\",则需

    2023年04月21日
    浏览(48)
  • 重生之我是孔乙己——查找数组缺失元素的几种方法

      💌 博客内容:查找缺失元素 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘 目录 题目  排序法  异或法  最天

    2023年04月10日
    浏览(37)
  • JavaScript中实现sleep睡眠函数的几种简单方法

    目录 一.什么是sleep函数? 二.为什么使用sleep? 三.实现sleep 一.什么是sleep函数? sleep是一种函数,他的作用是使程序暂停指定的时间,起到延时的效果。 官方介绍:sleep是一种函数,作用是延时,程序暂停若干时间,在执行时要抛出一个中断异常,必须对其进行捕获并处理才

    2024年02月02日
    浏览(45)
  • 启动docker容器的几种方法和注意事项(docker-compose,dockerfile)

    注意使用挂载命令volumes的时候,类似文件挂载可以这样写 表示宿主机docker-compose.yml当前目录下的/target/poi.jar文件挂载到容器默认目录app下 (如果是通过命令docker run -d -p 8088:8088 -v ./target/poi.jar:./app/,这样启动容器有两个报错,第一个是这样必须写绝对路径,不能写相对路径

    2024年02月11日
    浏览(50)
  • 【移动开发小技巧】苹果修改手机位置最简单的几种方法整理

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年02月12日
    浏览(40)
  • Java8 中map中删除元素的简单方法

    2024年04月23日
    浏览(28)
  • std::list和std::vector删除指定下标的元素

    list和vector都可以使用erase函数移除指定下标的元素,注意输入的是迭代器,返回值为指向下一个元素的位置。: 如果下标是index,直接调用即可: 如果根据下标一次性删除多个元素,则会发生错误,因为删除一个元素后,元素个数会发生变化,因此下标就会出现错误,正确代

    2024年02月11日
    浏览(56)
  • Selenium无法定位元素的几种解决方案

    🍅 视频学习: 文末有免费的配套视频可观看 🍅  关注公众号【互联网杂货铺】,回复 1  ,免费获取软件测试全套资料,资料在手,涨薪更快 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法:

    2024年02月22日
    浏览(45)
  • js删除数组的几种方式

    注意: 此方法改变数组的长度! 提示: 移除数组末尾的元素可以使用 pop() 方法。 slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。 注意: slice() 方法不会改变原始数组。 注意:这种方法会改变原始数组。 返回值 如果删除一个元素,则返回一个元素

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包