Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
C++ vector如何去重_C++ unique函数与erase组合使用技巧_创想鸟

C++ vector如何去重_C++ unique函数与erase组合使用技巧

去重需先排序再用std::unique与erase组合,或用unordered_set配合remove_if保持顺序。std::unique仅移除连续重复元素并返回新末尾,需erase清理内存;保持顺序时使用哈希表记录已见元素,遍历一次完成去重,时间复杂度O(n)。

c++ vector如何去重_c++ unique函数与erase组合使用技巧

在C++中,对vector进行去重是一个常见需求。最高效且常用的方法是结合使用std::unique和vector::erase。需要注意的是,std::unique并不会真正删除元素,它只是将重复的元素“移到”容器末尾,因此必须配合erase才能实现真正的内存清理。

使用unique与erase组合去重

std::unique要求容器中的元素是已排序的,否则只会去除连续重复的元素。因此,在使用前通常需要先排序。

基本步骤如下:

调用std::sort对vector排序,使相同元素相邻 使用std::unique将重复元素移动到末尾,并返回新的逻辑结尾迭代器 用erase删除从该迭代器到实际末尾的所有元素示例代码:

#include #include #include int main() {    std::vector vec = {5, 2, 8, 2, 1, 5, 3};    // 排序使相同元素相邻    std::sort(vec.begin(), vec.end());    // 去重并擦除    vec.erase(std::unique(vec.begin(), vec.end()), vec.end());    // 输出结果:1 2 3 5 8    for (int n : vec) std::cout << n << " ";}

保持原始顺序的去重方法

如果不想改变原vector的元素顺序,就不能先排序。此时可以借助std::unordered_set记录已出现的元素,然后使用std::remove_if配合自定义谓词来标记重复项。

立即学习“C++免费学习笔记(深入)”;

示例代码(保持顺序):

std::vector vec = {5, 2, 8, 2, 1, 5, 3};std::unordered_set seen;vec.erase(    std::remove_if(vec.begin(), vec.end(), [&seen](const int& value) {        if (seen.count(value)) {            return true; // 标记为待移除        }        seen.insert(value);        return false;    }),    vec.end());

这种方法遍历一次vector,利用哈希表快速查找,时间复杂度为O(n),适合对顺序敏感的场景。

unique函数的工作原理说明

std::unique会比较相邻元素,若相等则跳过后面的元素,只保留第一个。它返回一个迭代器,指向去重后的新末尾。原容器大小不变,被“去重”的元素仍存在于内存中,直到手动erase。

关键点:

std::unique不改变容器大小 只对连续重复元素有效,因此常需预排序 可用于自定义比较函数,如忽略大小写去重字符串

基本上就这些。掌握unique和erase的组合用法,能高效处理大多数去重场景。是否排序取决于是否需要保持原有顺序。不复杂但容易忽略细节。

以上就是C++ vector如何去重_C++ unique函数与erase组合使用技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1486191.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
C++中的CRTP是什么_C++奇特的递归模板模式实现静态多态
上一篇 2025年12月19日 09:35:59
C++ constexpr是什么_C++编译期常量表达式与性能优化
下一篇 2025年12月19日 09:36:12

相关推荐

  • 根据字母等级计算绩点并输出

    根据字母等级计算绩点并输出根据字母等级计算绩点并输出根据字母等级计算绩点并输出根据字母等级计算绩点并输出

    本文旨在指导读者如何编写一个Java程序,该程序接受用户输入的字母等级,并根据等级返回相应的绩点。程序包含异常处理机制,能够有效处理无效的字母等级输入,并输出相应的错误提示信息,确保程序的健壮性和用户体验。 程序实现 以下是一个Java程序的示例,它实现了根据用户输入的字母等级计算并输出绩点的功能。…

    2026年10月1日 • 用户投稿
    100
  • VSCode 怎样使用断点调试 TypeScript 代码 VSCode 断点调试 TypeScript 代码的方法​

    要让vscode的断点在typescript代码中生效,必须正确配置源映射和调试环境,具体步骤如下:1. 确保项目根目录有tsconfig.json文件,若无则通过tsc –init生成;2. 在tsconfig.json中设置”sourcemap”: true以…

    2026年10月1日
    000
  • 詹姆斯・卡梅隆谈 AI:能和人类一样富有创造力,但无法拥有独特生活体验

    詹姆斯・卡梅隆谈 AI:能和人类一样富有创造力,但无法拥有独特生活体验詹姆斯・卡梅隆谈 AI:能和人类一样富有创造力,但无法拥有独特生活体验詹姆斯・卡梅隆谈 AI:能和人类一样富有创造力,但无法拥有独特生活体验詹姆斯・卡梅隆谈 AI:能和人类一样富有创造力,但无法拥有独特生活体验

    9 月 20 日消息,据外媒 the verge 18 日报道,著名导演詹姆斯・卡梅隆在 meta connect 大会上与 meta cto 安德鲁・博斯沃斯同台,展示了双方合作的首个成果:quest 用户可通过头显上的全新 horizon tv 应用,观看其即将上映的《阿凡达 3》电影独家预览片…

    2026年10月1日 • 用户投稿
    000
  • Java中Boolean类型值的精确校验方法

    Java中Boolean类型值的精确校验方法Java中Boolean类型值的精确校验方法Java中Boolean类型值的精确校验方法Java中Boolean类型值的精确校验方法

    本文旨在解决Java中Boolean类型值的精确校验问题,即如何确保用户输入的值严格为true或false,并针对无效输入给出明确的错误提示。我们将探讨如何在不改变数据类型的前提下,实现对Boolean类型值的有效验证,并提供相应的代码示例和注意事项。 Boolean类型值的精确校验 在Java中,…

    2026年10月1日 • 用户投稿
    000
  • 赢下届入场券!卓威高校电竞文化节线上开播

    赢下届入场券!卓威高校电竞文化节线上开播赢下届入场券!卓威高校电竞文化节线上开播赢下届入场券!卓威高校电竞文化节线上开播赢下届入场券!卓威高校电竞文化节线上开播

    2025年9月20日至21日,卓威高校电竞文化节将正式拉开帷幕,a区现场将举办电竞社团分享交流会,汇聚近百位来自全国各地高校电竞社团成员,共同助力高校电竞的蓬勃发展。 而未能来到现场的同学们也不必感到沮丧,我们将同步开放腾讯会议直播通道,届时不仅将有优秀社团代表带来专业的社团建设经验分享,更有前TY…

    2026年10月1日 • 用户投稿
    100
  • Java中如何使用void方法修改boolean状态

    Java中如何使用void方法修改boolean状态Java中如何使用void方法修改boolean状态Java中如何使用void方法修改boolean状态Java中如何使用void方法修改boolean状态

    在Java编程中,经常需要控制对象的状态。当对象的状态由一个boolean类型的变量表示时,我们可以使用void方法(通常是setter方法)来改变这个boolean变量的值,从而改变对象的状态。本文将通过一个简单的例子,详细讲解如何实现这一目标。 public class Status { pri…

    2026年10月1日 • 用户投稿
    100
  • 苹果手机关闭来电振动方法

    步骤1:打开“设置”应用 首先,解锁你的iPhone,找到主屏幕上的“设置”应用图标——它通常是一个灰色的齿轮形状。点击进入设置界面。 步骤2:进入“声音与触感”菜单 在设置列表中向下滚动,找到“声音与触感”选项(部分iOS版本可能显示为“声音与专注力”),点击进入该设置页面。 步骤3:关闭来电振动…

    2026年10月1日
    000
  • 拼多多商家延迟发货怎么操作?拼多多商家延迟发货怎么申请

    拼多多商家延迟发货怎么操作?拼多多商家延迟发货怎么申请拼多多商家延迟发货怎么操作?拼多多商家延迟发货怎么申请拼多多商家延迟发货怎么操作?拼多多商家延迟发货怎么申请拼多多商家延迟发货怎么操作?拼多多商家延迟发货怎么申请

    1、可通过拼多多商家版APP联系官方客服申请延迟发货,适用于疫情等不可抗力情况;2、在订单管理页面对个别订单操作延长发货时间,最多可延1至3天;3、针对批量订单或大促异常,可通过违规申诉通道提交证明材料进行报备。 如果您需要为订单申请延长发货时间,以避免因不可抗力或特殊情况导致的处罚,可以按照以下多…

    2026年10月1日 • 用户投稿
    100
  • 豆包AI怎样辅助Django开发?快速构建Web应用后端

    豆包AI怎样辅助Django开发?快速构建Web应用后端豆包AI怎样辅助Django开发?快速构建Web应用后端豆包AI怎样辅助Django开发?快速构建Web应用后端豆包AI怎样辅助Django开发?快速构建Web应用后端

    豆包ai可在django开发中显著提升效率,具体体现在以下方面:1. 快速生成项目结构,根据需求输出基础代码框架;2. 自动生成模型并提供数据库设计建议,包括字段类型、索引和约束;3. 编写视图逻辑与接口文档,支持drf视图、路由及响应示例;4. 提供问题解决方案与调试建议,如处理迁移冲突、调试慢查…

    2026年10月1日 • 用户投稿
    100
  • NVIDIA新动作:RTX 50显卡被删除AI相关宣传

    NVIDIA新动作:RTX 50显卡被删除AI相关宣传NVIDIA新动作:RTX 50显卡被删除AI相关宣传NVIDIA新动作:RTX 50显卡被删除AI相关宣传NVIDIA新动作:RTX 50显卡被删除AI相关宣传

    9月21日消息,如今的显卡已经不局限于游戏功能,ai功能也是一大重点,nvidia这几代显卡都强化了ai性能,rtx 50系列更是如此。 但是现在NVIDIA在这方面突然来了一波让人不太看得懂的操作,从RTX显卡的包装和宣传中移除了“Powering Advanced AI”(提供先进AI功能)这一…

    2026年10月1日 • 用户投稿
    000
  • Sublime集成第三方API聚合平台应用_从天气查询到支付接口对接实例

    Sublime集成第三方API聚合平台应用_从天气查询到支付接口对接实例Sublime集成第三方API聚合平台应用_从天气查询到支付接口对接实例Sublime集成第三方API聚合平台应用_从天气查询到支付接口对接实例Sublime集成第三方API聚合平台应用_从天气查询到支付接口对接实例

    sublime虽是文本编辑器,但可通过写调用代码实现api对接。1. 利用build system配置python环境,使用requests库发送get/post请求。2. 借助api聚合平台获取标准化接口,简化接入流程。3. 调试时注意密钥保密、签名正确、处理ssl证书与异常返回值,确保请求稳定。…

    2026年10月1日 • 用户投稿
    100
  • 为什么联想笔记本CPU性能不稳定?驱动更新方法

    为什么联想笔记本CPU性能不稳定?驱动更新方法为什么联想笔记本CPU性能不稳定?驱动更新方法为什么联想笔记本CPU性能不稳定?驱动更新方法为什么联想笔记本CPU性能不稳定?驱动更新方法

    如果您发现联想笔记本在使用过程中CPU性能出现波动,例如运行速度忽快忽慢、游戏或大型软件卡顿,这可能是由于电源管理设置不当、散热策略限制或驱动程序不兼容导致的。以下是解决此问题的步骤: 一、检查并调整电源管理模式 电源管理模式直接影响CPU的最大性能输出。如果系统处于节能模式,CPU会被限制运行频率…

    2026年10月1日 • 用户投稿
    100
  • Java中如何使用void方法改变布尔变量的状态

    Java中如何使用void方法改变布尔变量的状态Java中如何使用void方法改变布尔变量的状态Java中如何使用void方法改变布尔变量的状态Java中如何使用void方法改变布尔变量的状态

    在Java编程中,经常需要管理对象的状态。当状态由布尔变量表示时,例如表示一个门是打开还是关闭,或者一个服务是启用还是禁用,就需要一种方法来改变这个布尔变量的值。通常,我们会使用void方法来实现这一目标。 以下是如何使用void方法来改变Java类中布尔变量状态的示例: public class …

    2026年10月1日 • 用户投稿
    000
  • 有老外以为《古剑》是类魂 游戏博主反驳:根本不是

    有老外以为《古剑》是类魂 游戏博主反驳:根本不是有老外以为《古剑》是类魂 游戏博主反驳:根本不是有老外以为《古剑》是类魂 游戏博主反驳:根本不是有老外以为《古剑》是类魂 游戏博主反驳:根本不是

    近日,烛龙游戏正式公布了单机arpg新作《古剑》。作为《古剑奇谭》系列的最新正统续作,本作将采用买断制模式,登陆pc及主机平台。 在Reddit等海外游戏论坛上,部分国外玩家误认为《古剑》是一款类魂游戏,并发表评论称:“未来十年我们会看到大量使用虚幻引擎制作的中国‘类魂’仿制品。”对此,知名游戏博主…

    2026年10月1日 • 用户投稿
    100
  • 跨境卖家的神操作:豆包AI写文案+HeyGen生成多语种带货视频

    跨境卖家的神操作:豆包AI写文案+HeyGen生成多语种带货视频跨境卖家的神操作:豆包AI写文案+HeyGen生成多语种带货视频跨境卖家的神操作:豆包AI写文案+HeyGen生成多语种带货视频跨境卖家的神操作:豆包AI写文案+HeyGen生成多语种带货视频

    跨境卖家可用豆包ai生成多语言营销文案,并通过heygen制作多语种带货视频,实现高效拓展海外市场。具体步骤为:1. 使用豆包ai根据目标受众生成本地化文案;2. 提供详细产品信息提升文案精准度;3. 尝试多种文案风格并人工优化;4. 利用heygen生成自然流畅的多语种视频;5. 选择合适真人形象…

    2026年10月1日 • 用户投稿
    200
  • 使用 void 方法改变 Java 中 boolean 变量的状态

    使用 void 方法改变 Java 中 boolean 变量的状态使用 void 方法改变 Java 中 boolean 变量的状态使用 void 方法改变 Java 中 boolean 变量的状态使用 void 方法改变 Java 中 boolean 变量的状态

    本文将介绍如何在 Java 中使用 void 方法来改变 boolean 变量的状态,实现从关闭到打开的转换。我们将通过一个简单的示例,演示如何创建一个包含 boolean 状态的类,并使用 void 方法来修改该状态,从而实现状态的切换。 创建状态类 首先,我们需要创建一个类来封装 boolean…

    2026年10月1日 • 用户投稿
    000
  • iCloud官网怎么迁移数据_iCloud数据迁移到新设备指南

    iCloud官网怎么迁移数据_iCloud数据迁移到新设备指南iCloud官网怎么迁移数据_iCloud数据迁移到新设备指南iCloud官网怎么迁移数据_iCloud数据迁移到新设备指南iCloud官网怎么迁移数据_iCloud数据迁移到新设备指南

    使用iCloud云备份恢复数据:在旧设备开启iCloud备份并上传完成后,新设备激活时登录同一Apple ID,选择最新备份文件恢复。2. 通过快速开始功能直接迁移:将新旧设备靠近,利用蓝牙和Wi-Fi直连加密传输,按提示扫描图案、输入密码后开始迁移。3. 借助电脑端工具进行本地备份迁移:通过Fin…

    2026年10月1日 • 用户投稿
    000
  • 《守望先锋2》艺术图再陷AI制作争议 暴雪坚决否认

    《守望先锋2》艺术图再陷AI制作争议 暴雪坚决否认《守望先锋2》艺术图再陷AI制作争议 暴雪坚决否认《守望先锋2》艺术图再陷AI制作争议 暴雪坚决否认《守望先锋2》艺术图再陷AI制作争议 暴雪坚决否认

    《守望先锋2》的开发商暴雪针对“游戏中新推出的喷漆内容由人工智能生成”的质疑做出回应,明确否认了这一说法。 近期,不少《守望先锋2》玩家在X平台和Reddit等社交论坛上表达疑虑,指出游戏中描绘“探奇”、“朱诺”以及新英雄“无漾”的卡通风格喷漆存在疑似AI创作的特征。有玩家以“探奇与朱诺背靠背”的喷…

    2026年10月1日 • 用户投稿
    000
  • java如何用++实现变量自增 java自增运算语句的入门教程

    java如何用++实现变量自增 java自增运算语句的入门教程java如何用++实现变量自增 java自增运算语句的入门教程java如何用++实现变量自增 java自增运算语句的入门教程java如何用++实现变量自增 java自增运算语句的入门教程

    java中实现变量自增最常用的方式是使用自增运算符++,它分为前置++i和后置i++两种形式,核心区别在于表达式返回值的时机:++i先自增再返回新值,i++先返回原始值再自增;在独立语句中二者效果相同,但在赋值或复杂表达式中行为不同,需谨慎使用;此外,++运算符对byte、short、char类型有…

    2026年10月1日 • 用户投稿
    100
  • Sublime处理JSON数据格式实用技巧_快速格式化与结构分析

    Sublime处理JSON数据格式实用技巧_快速格式化与结构分析Sublime处理JSON数据格式实用技巧_快速格式化与结构分析Sublime处理JSON数据格式实用技巧_快速格式化与结构分析Sublime处理JSON数据格式实用技巧_快速格式化与结构分析

    sublime text通过安装pretty json插件可快速美化和验证json。1. 安装package control并添加pretty json插件;2. 选中json内容后使用快捷键ctrl+alt+j(或cmd+alt+j)进行格式化;3. 利用其错误提示功能检查语法问题;4. 使用正则…

    2026年10月1日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信