STL中的unique和erase

别再用数组标记了!用C++ STL的unique和erase搞定‘整数去重’,保留原序就这么简单 本文详细介绍了如何使用C++ STL的unique和erase函数优雅实现整数去重,保留原序并提升代码效率。通过对比传统方法和STL方案的优缺点,提供了三种实战方案及性能优化建议,特别适合编程竞赛和日常开发中的整数去重需求。 阅读详情
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstdlib>
using namespace std;
int main()
{
int n=17;
int mm[30]={1,3,4,2,4,45,3,56,75,434,434,32,54,45,56,4353,32};//n=17; 
sort(mm,mm+n);
int *p;
p=unique(mm,mm+n);
cout<<"排重排序后的结果,包含被查重的元素在内 "<<endl; 
for(int i=0;i<n;i++)
   cout<<mm[i]<<" "; 
cout<<endl;       
int *qq=mm; 
int kg;
for(int i=0;i<n;i++)
{
   if(qq==p)
     {kg=i;break;}
   else
      qq++;     
}
cout<<"输出最后的无重元素排序结果 "<<endl; 
for(int i=0;i<kg;i++)///
  cout<<mm[i]<<" ";        
system("pause"); 
return 0;} 
/*//
排重排序后的结果,包含被查重的元素在内
1 2 3 4 32 45 54 56 75 434 4353 56 56 75 434 434 4353
输出最后的无重元素排序结果
1 2 3 4 32 45 54 56 75 434 4353
*/// 


 

 

 

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstdlib>
using namespace std;
int main()
{
string mm="hello_word_hello_word";
sort(mm.begin(),mm.end());
cout<<"排重排序后的结果,包含被查重的元素在内 "<<endl; 
cout<<mm<<endl; 
mm.erase(unique(mm.begin(),mm.end()),mm.end());
cout<<"输出最后的无重元素排序结果 "<<endl; 
cout<<mm<<endl; 
system("pause"); 
return 0;} 
/*//-----
排重排序后的结果,包含被查重的元素在内
___ddeehhlllloooorrww
输出最后的无重元素排序结果
_dehlorw
*/// 


 

 

小结:erase()

erase函数的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是说有三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
下面给你一个例子:
// string::erase
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("This is an example phrase.");
  string::iterator it;

  // 第(1)种用法
  str.erase (10,8);
  cout << str << endl;        // "This is an phrase."

  // 第(2)种用法
  it=str.begin()+9;
  str.erase (it);
  cout << str << endl;        // "This is a phrase."

  // 第(3)种用法
  str.erase (str.begin()+5, str.end()-7);
  cout << str << endl;        // "This phrase."
  return 0;
}

你的假如是删除数组中的一项,并不能说明erase的用法。

 

 

 

小结:unique()

排重排序

STM32Cubemx-H7-17-麦克纳姆轮驱动 我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。 阅读详情

相关推荐

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2108

erase与unique结合用于彻底删除重复元素

STL中的unique只能把重复的元素全部放到容器末端,并不能真正把重复元素删除. 这里使用unique 和 erase 则可达到彻底删除效果 示例代码如下: #include <iostream> #include <algorithm> #include <string> #include <vector> using names...

weixin_30762087的博客 597

Autoware.universe部署03:与Carla(二进制版)联调

本文介绍了 Autoware.universe 与 Carla 二进制版的联调过程。Autoware.universe 是一个开源的自动驾驶软件平台,而 Carla 则是一个用于自动驾驶仿真的开源工具。将这两者联调起来可以在仿真环境中测试和验证 Autoware.universe 的功能和性能,为自动驾驶系统的开发和测试提供有力支持。

zardforever123的博客 7368

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

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

白小飞 1193

工业级越界行为识别数据集:YOLOv8/v9直接训练的围栏异常检测资源

越界行为识别是智能安防与工业安全中的基础视觉任务,其核心在于对人员、车辆等目标跨越物理边界(如围栏、警戒线、作业禁区)的精准检测与分割。该技术依赖于高质量实例分割标注、归一化坐标格式及场景鲁棒性设计,具备低延迟、高召回、强泛化等工程价值,广泛应用于智慧工地电子围栏、化工厂禁区告警、物流园区越界监控及变电站安全巡检等真实工业场景。本数据集以YOLOv8/v9为基准构建,提供万张实拍+合成图像、像素级Segmentation标注、分层划分与完备元数据,开箱即用,直击工业落地中数据清洗、格式转换与标注不一致等关键

weixin_30080745的博客 316

Oracle PLM Agile936 单点登录配置方式

Oracle PLM Agile936 单点登录配置方式

Jay的个人博客 824

stl中unique函数,erase函数(个人笔记向)

unique函数并不是删除相同的元素,而是不断的copy后面不同的元素到前面连续相同元素的位置上。

weixin_70831807的博客 581

中国境内及周边2839个站点的日降水量逐日降水数据集(1961-2022,0.1°/0.25°/0.5°)1、数据年份:1961-2022,日数据2、数据范围:中国境内及周边2839个站点的日降

CHM_PRE数据集基于中国境内及周边1961至今共2839个站点的日降水观测,在传统的“降水背景场+ 降水比值场”的数据集构建思路上,尝试应用月值降水约束和地形特征校正,并依据中国范围内约4万个高密度站点2015–2019年的日降水量插值后数据进行精度评价。

yushibing717的博客 2787

erase函数跟unique函数叠加用法

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

sync_with_U 697

Oracle EBS和华为MetaERP在会计科目(COA)设计上的观察非常精准。这两种设计确实代表了两种截然不同的系统架构思想,我们可以从设计哲学、优劣对比和演进关系三个方面进行深入分析。

OracleEBS与华为MetaERP的COA设计对比分析 OracleEBS采用弹性域架构,通过固定段数字符串实现多维度核算,强调稳定性和全球统一标准,但修改成本高、扩展性受限。华为MetaERP采用解耦架构,将核算单元、自然科目和核算维度分离,支持动态扩展和灵活调整,更适合业务快速变化的企业。 OracleEBS优势在于强一致性和成熟稳定,劣势是灵活性差;华为MetaERP优势是极致灵活性,劣势是对管理要求高。两者代表了不同时代的企业软件设计理念:OracleEBS适合标准化需求,MetaERP则面向快

金牌架构师 429

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优

LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 8751

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

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

qq_75103498的博客 1258

【ARFoundation自学04】AR Tracked Image 图像追踪识别与对应类的调用

1.添加组件 2.创建图像识别库 3.创建识别后追踪的物体(UI、模型等)

leoysq的博客 2560

[学习][STL]unique和erase

//在vector中的应用#include <iostream> #include<cstdio> #include<vector> #include<algorithm> using namespace std; vector<int> a;vector<int>::iterator p; ...

dingfei496705的博客 245

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

人的梦想是不会终结的 956

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++ STL 去重与合并算法精讲:unique去重、erase-unique套路、merge有序合并、集合运算全套原理与工程实战

我们完成了数据结构顺序表的深度学习,彻底吃透了 vector 底层动态扩容、内存连续、增删移位的核心机制,明白了容器底层数据排布逻辑。今天我们回归 C++ STL 算法体系,继续补齐工程高频算法能力。在日常业务开发、数据预处理、算法刷题中,数据去重、有序数组合并、集合求交/并/差集是刚需操作。很多开发者处理去重逻辑时,只会手写双层循环暴力去重,不仅代码冗余、可读性差,时间复杂度 O(n²) 极易超时,还容易出现边界处理漏洞。

2401_86195313的博客 381

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++ unique(),erase(),sort()使用小记

 在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个)其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。例如:  string s("hello,world");  string::iterator iterE...

linzdg的博客 964

substr erase unique

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

2401_87756641的博客 274

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

C++学习笔记—unique及erase的联合运用 原文:http://blog.youkuaiyun.com/laoma023012/article/details/51966238   在STL中unique函数是一个去重函数,unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,

icaiyuniyue的博客 291

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

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

天与云与山与水 2050

QVector容器内元素排序和去重简单用法(sort、vector、unique、erase)

本文主要总结给Qt的QVector容器内元素排序和去重,下面是关键函数总结。 1.1核心函数讲解 Qt中的QVector容器用法跟STL中的vector容器基本一样。本文是先建立一个容器,然后随机填充十个0-5内整数,接着用算法对QVetor容器内的元素进行排序和去重。 其中,算法的关键是先对容器元素进行排序才能去重。排序用STL的sort()函数,去重用STL的unique()函数和era...

净无邪博客 1万+

unique 函数 c++

一 unique函数 作用:从序列中“删除”所有相邻的重复元素。 既然是删除相邻的重复元素,所以要保证序列有序,用之前要把序列排序,调用sort()函数。在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址。注意,num的大小并没

mfcheer 1273

C++STL中的unique函数解析

转载文章!! 一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。 二.函数原型 unique函数的函数原型如下: 1.只有两个参数,且参数类...

qq_43406116的博客 445

unique 函数 详解

unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。 二.函数原型 unique函数的函数原型如下: 1.只有两个参数,且参数类型都是迭代器: ...

小渣渣的博客 5万+

5分钟搞定LeetCode高频题:用STL的lower_bound、unique和next_permutation刷题提速

本文介绍了如何利用C++ STL中的`lower_bound`、`unique`和`next_permutation`函数快速解决LeetCode高频算法题。通过对比手写代码与STL实现的效率,展示了这些函数在二分查找、数组去重和全排列生成中的强大优势,帮助开发者提升刷题速度和代码质量。

weixin_30940783的博客 212
上一篇: POJ1995 Raising Modulo Numbers
下一篇: vector小结
muximuxi525
博客等级 码龄15年 134粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值