C++ unique and erase问题处理

别再用数组标记了!用C++ STL的unique和erase搞定‘整数去重’,保留原序就这么简单 本文详细介绍了如何使用C++ STL的unique和erase函数优雅实现整数去重,保留原序并提升代码效率。通过对比传统方法和STL方案的优缺点,提供了三种实战方案及性能优化建议,特别适合编程竞赛和日常开发中的整数去重需求。 阅读详情

这一直在玩下面的代码一直都没有解决erase问题,今天再读代码在发现了问题的所在。

 

执行结果:

 

 

 

貌似erase没有工作,即就是没有删除对应的元素。仔细阅读之后才发现,我把一个东西给弄忘记了。

 

unique在之前调用过了,而unique一旦调用那么就会对容器的数据进行排序,这样一来再次调用unique

   //it = strvec.begin();
    //ituniq = unique(it,strvec.end());

时,就会对容器再次排序,而这次的排序是在前一次的基础上排序的,这样一来就会对在容器中出现三次的元素再排将相连的元素放到unique返回的那个迭代器的下面的位置。当我们再使用erase时,就会删除新的unique返回的迭代器所指的位置之后的元素,也就是说在第一次unique得到的迭代器所指位置到新的unique返回的迭代器位置之间的每一个元素可能会与第一个迭代器位置之前的每一个元素相同,即只是在两次unique和一次erase中叫三次出现的元素删除了一个,分隔开了两个。那么没有达到我们的目的。所以上面的代码是不应该要的。去除后就得到了正确的结果。执行结果如图:

 

 

C++ std::unique算法详解:原理、陷阱与高效去重实践 在C++编程中,处理容器数据去重是常见的需求。算法库提供了多种工具,其中`std::unique`专用于移除连续重复元素,其核心原理是基于等价关系对相邻元素进行判断和覆盖操作,而非直接删除。该算法具有线性时间复杂度和稳定性,能保持元素原始顺序,在性能上优于关联容器。其技术价值在于高效处理已排序或局部有序数据的去重任务,常与`std::sort`组合实现全局去重,形成经典的`erase-remove`惯用法。应用场景包括日志压缩、字符串处理和传感器数据清洗等。本文深入解析了`std::unique`的行为机制 阅读详情

相关推荐

Ubuntu20.04复现instant-ngp,自建数据集,导出mesh

本次仅仅记录一下自己复现instant-ngp的过程,如果里面的参考有冒犯到原博主请联系我删除,本人也是nerf的小白一枚,可以一起交流学习神经辐射场,希望大家在复现instant-ngp的时候少走一些坑,情况允许下可以去复现一下npg-pl和nerfStudio,最后希望大家一起进步。看到一些博主说葵司的npg_pl也不错,而且葵司是台湾人,在youtube上也有讲解的视频。渲染的效果还是可以的,相对于源码来说还是有点模糊,我一些参数也没有设置,直接就拉进来进行渲染,速度是非常快的。

weixin_59961223的博客 9451

c++两种去重方法(erase+unique 和 unique)

两种算法比赛中常用到的去重操作

qq_75103498的博客 1258

【学长笔记】点亮 STM32F411CEU6 板载 LED —— 入门级教程

本文提供了STM32F411CEU6开发板(Black Pill)点亮LED的完整教程。详细介绍了硬件信息(板载LED连接PC13,低电平有效)、CubeMX配置步骤(GPIO输出模式)、Keil5工程设置及完整代码实现(包含GPIO初始化和系统时钟配置)。教程还涵盖ST-Link下载器连接方法、程序下载步骤(需配合BOOT0按键操作)以及验证程序运行的方法。该教程特别适合STM32初学者,通过简单的LED闪烁示例快速入门STM32开发。

apple_53308981的博客 1323

C++ unique()函数和erase()函数

unique() "unique"是C++语言中的STL函数,包含于头文件中。功能是将数组中相邻的重复元素去除。然而其本质是将重复的元素移动到数组的末尾,最后再将迭代器末尾指向最后不重复的下标。返回的是一个指向最后不重复元素的迭代器。 因为是去除相邻的重复元素,所以要用sort先对数组进行排序才行。 erase() 语法: iterator erase( iterator loc ); iterator erase( iterator start, iterator end ); 要么删除指定位置的元素,要

白小飞 1193

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南)

本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。

rgv234567的博客 264

C++利用unique和erase去除容器中相同元素

转载

随意凯的博客 806

从零到一:RagFlow源码架构深度解析与二次开发实战指南

本文深入解析RagFlow源码架构,提供从环境搭建到二次开发的全流程实战指南。作为企业级AI搜索框架,RagFlow通过模块化设计和多模态处理能力,支持自定义智能体开发与文搜文档功能,帮助开发者高效构建智能搜索系统。

w1x2y3的博客 267

C++学习笔记—unique及erase的联合运用

首先附上leetcode 349题中unique的应用class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> result; // int *last; // auto end_unique=uni

不忘初心 方得始终 5744

mstar PQ软件修改方法

1.修改ADC的值 Static code APIXC_AdcGainOffsetSetting tADCSetting[ADC_SET_NUMS]= #define INIT_ADC_RGB_RED_GAIN               0x1000 #define INIT_ADC_RGB_GREEN_GAIN           0x1000 #define INIT_ADC_RGB

qq_18810259的专栏 2565

【暂时完结】Prescan学习笔记

Prescan学习记录1. Prescan基础知识1.1 Conventions·坐标1.2 Road segment·道路片段1.2.1 让一个路段连接其他两个路段1.2.2 配置车道线1.2.3 Road marking·道路标志1.3 Trajectory·轨迹1.3.1 建立一个Path·路径1.3.2 配置Speedprofile1.3.3 Synchronization of Trajectories·轨迹同步1.3.4 Multiple trajectories · 多轨迹分配 1. Pres

dreautumn的博客 1万+

c++ vector删除元素,使用unique ,erase

// // Created by wuyongyu on 2019-10-10. // #include <iostream> #include <string> #include <thread> #include <mutex> #include <chrono> #include <vector> #include &...

TH_NUM的博客 1254

《网络安全自学教程》- MySQL脱库原理和步骤

MySQL脱库,脱库的原理,怎么脱库,脱库的步骤,一库三表六字段

wangyuxiang946的博客 1万+

substr erase unique

本文介绍了C++中迭代器、substr、erase和unique四个关键概念。迭代器提供统一访问容器元素的方式,substr用于提取字符串子串,erase删除容器元素,unique去除相邻重复项。文章重点解析了各函数的使用方法、注意事项及迭代器失效问题,并通过综合示例展示了如何结合这些功能进行字符串处理。这些基础操作在C++编程中具有广泛应用,理解其特性对编写高效、安全的代码至关重要。

2401_87756641的博客 274

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vector排序去重 (vector、sort函数、unique函数、erase函数、auto关键字)

使用前需要头文件这里的T是要存储在vector中的元素类型。arr是一个数组,第三条代码表示将数组arr中的前n条数据赋给vector。

l20011101的博客 1733

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

sort unique erase

这段代码首先对`vec`中的整数进行了排序,然后使用`unique()`函数将重复的元素移到了容器的末尾,并返回了一个指向新结尾的迭代器。最后,通过`erase()`函数删除了那些重复的元素,只保留了唯一且已排序的值。// 注意:unique()不会直接删除元素,而是将重复的元素移到容器的末尾,并返回一个新的结束迭代器。// Step 3: 使用erase()删除unique()标记的重复元素。// Step 1: 使用sort()对容器中的元素进行排序。// 输出处理后的vector。

weixin_43803780的博客 413

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

去重函数unique,sort,erase

std::unique 一.总述   unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不 是真的删除,而是指重复元素的位置被不重复的元素给占领了。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都 会将目标序列进行排序。 功能:对有序的容器重新排列,将第一次出现的元素从前往后排,其他重复出...

John Will的博客 1万+

C++中unique(),unique_copy()和erase()

函数1 unique()的用法, unique()两个参数,第一个是首地址,第二个是末地址(stl区间默认为左闭右开), 他的原理是通过相邻比较(这就要求在处理之前用sort排序)删除重复的元素,但是不会真正的删除,而是会放到尾地址后面(为了这个套路,不会返回真正的尾地址,尾地址前面都是不重复的元素),就是酱紫;可以用来比较数字,不只是字符串。 2 而unique-copy的方法作用是将得到的

天与云与山与水 2050

C++使用unique进行去重

unique函数的作用 功能是去除相邻的重复元素(只保留一个) unique函数不真正把重复的元素删除,其实是,该函数把重复的元素移到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的x下一个地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序 使用unique对vector进行去重 先对vector进行排序 使用erase函数结合unique进行去重 #include <iostream> #include <vector> #inclu

zhpf225的博客 1226

海鸥3.0破甲为什么能离线生效:Codex-X 提示词注入的三个设计取舍

Codex-X 的提示词注入功能里,海鸥3.0破甲模板在完全断网的第一次启动就能被启用,启用后发一句「在吗」只会得到一行固定应答。它做到这一点,靠的不是运行时下载,而是 [constants.rs](https://link.gitcode.com/i/5bd4861ffd5d203f51acb00aaa92ad5b) 里的一行 `include_str!` 把整份 Markdown 编译进了二进

gitblog_00018的博客 334

erase函数跟unique函数叠加用法

如输出所示,首先给数组排序,然后使用unique函数,去重,发现前半段是不重复元素,后半段事重复元素,且是重复元素中随机的,并不是前面的重复元素,最后再排序,进行去重处理,得到一个不重复且单调的数组。一个无序且含重复元素的数组,我们经常需要通过去除重复元素来完成我们需要完成的事。那么在stl中,我们一般如何完成呢?...

sync_with_U 697

java 去重函数_去重函数unique,sort,erase的应用

std::unique一.总述unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。功能:对有序的容器重新排列,将第一次出现的元素从前往后排,其他重复出现的元素依次排在后面二....

weixin_34508986的博客 2580

std::unique,std::sort,std::erase

中文标准库:std::unique 中文标准库:std::sort 中文标准库:std::erase 一、unique 注意: unique是移除连续的重复元素,不连续的不会移除,因此如果要移除所有重复元素需要先进行排序 对容器使用unique并不会使容器的元素个数减少,实际上容器的容量并没有改变,因此如果要移除容器中的连续重复元素需要配合std::erase 返回值是:指向容器新结尾的前向迭代...

qq_38349382的博客 190

STL中transform ,erase,sort,unique的使用

1.transform用来改变集合中所有的元素,按照统

人的梦想是不会终结的 956

C++STL中unique函数详解(源码之前——了无秘密)

源码之前——了无秘密。 C++STL中unique函数详解(源码之前——了无秘密) 总结 unique函数是属于STL中比较常用的函数,因为我们如果用的存储结构不是set容器,或者说我们想主动进行元素去重,那么unique函数就可以帮到我们,它的作用自然就是元素去重,即“删除”序列中的所有相邻的重复元素(只保留一个)。注意我们这里的“删除”并不是真的删除,只是用不重复元素顶替重复元素,假设有一个已经排好序了的nnn个元素的容器,现其中有kkk个不重复元素,那么经过unique函数处理后前k个元素是不重复

pursuit的博客 1864

c语言 unique函数,C++ unique(STL unique)算法详解

unique() 算法可以在序列中原地移除重复的元素,这就要求被处理的序列必须是正向迭代器所指定的。在移除重复元素后,它会返回一个正向迭代器作为新序列的结束迭代器。可以提供一个函数对象作为可选的第三个参数,这个参数会定义一个用来代替 == 比较元素的方法。例如:std::vector words {"one", "two", "two", "three", "two", "two", "two"}...

weixin_39893893的博客 448
上一篇: C++ unique
下一篇: C++ static、const对象声明与定义
Qicz
博客等级 码龄16年 56粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值