蓝桥杯基础知识5 unique()

蓝桥杯基础知识5 unique()

#include <bits/stdc++.h>int main(){std::vector<int> vec = {1,1,2,2,3,3,3,4,4,5};auto it = std::unique(vec.begin(), vec.end());vec.erase(it, vec.end());//vec.erase(unique(vec.begin(),vec.end()),vec.end())  //将重复的区域删除//1,	2,	3,	4,	5,	1,	2,	3,	4	//begin					it				endfor(int num : vec)std::cout << num << " ";//1,    2,    3,    4,    5std::cout << std::endl;return 0;
}

C++ 在线工具 | 菜鸟工具 (runoob.com)

注意:

unique()只能去除相邻的重复元素,如果容器中存在非相邻的重复元素,则无法去除。

可以先对容器元素进行排序sort(),再使用unique();

sort()时间复杂度为O(nlogn),unique()时间复杂度为O(n)。

#include <bits/stdc++.h>
using namespace std;int main(){int a[] = {1,1,2,2,3};int n = unique(a, a + 5) - a;for(int i : a)cout << i << " ";	// 1,	2,	3,	2,	3cout << endl;for(int i = 0; i < n; ++i)cout << a[i] << " ";	// 1,	2,	3cout << endl;for(int i = 0; i < 5; ++i)cout << a[i] << " ";	// 1,	2,	3,	2,	3cout << endl;	//去重元素int b[] = {3,1,2,2,3};int m = unique(b, b + 5) - b;for(int j : b)cout << j << " ";	// 3,	1,	2,	3,	3  cout << endl;for(int j = 0; j < m; ++j)cout << b[j] << " ";	// 3,	1,	2,	3//不能写成for(int j : b)cout << j << " ";否则报错cout << endl;sort(b, b + 5);int k = unique(b, b + 5) - b;for(int j = 0; j < k; ++j)cout << b[j] << " ";	// 1,	2,	3 cout << endl;return 0;
}

unique并不是真正地将重复元素进行了删除,而是不断将不重复的元素移动到数组的前面,最后返回的是去重后的不重复数列中最后一个元素的下一个元素的地址,如果需要计算该地址所对应的下标,则利用unique(a,a+n)-a即可。

template<class ForwaedIt>
ForwardIt unique(ForwardIt first, ForwardIt last);

unique()是一个用于去除容器中相邻重复元素的函数。定义在<algorithm>头文件中。

first:指向容器中要去重的第一个元素的迭代器。

last:指向容器中要去重的最后一个元素的下一个位置的迭代器。

类reverse(),reverse是反转。

unique()将 [first, last) 范围内的相邻重复元素去除,

                并返回一个指向去重后范围的末尾后的迭代器。

                去重后的范围只保留了第一个出现的元素,

                后续重复元素都被移除。

                可用于数组、向量、链表等。

不删除所有重复的元素,而是通过将序列中存在的下一个元素替换为

与当前要替换的当前元素不重复的下一个元素来消除重复性。

所有被替换的元素都处于未指定状态。

去重后不会更改容器的大小,仅返回一个指向容器新端的指针,

并根据此指针来调整容器的大小或删除容器的大小。

reference:

C++ std::unique用法及代码示例 - 纯净天空 (vimsky.com)

std::unique - C++中文 - API参考文档 (apiref.com)

c++ unique函数详解-CSDN博客

unique函数用法-CSDN博客

【C++】vector中erase用法_c++ vector erase-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣82-删除排序链表中的重复元素

删除排序链表中的重复元素 题目链接 解题思路 1.遇见相同的元素直接删除即可 2.链表的头部也可能是重复元素&#xff0c;所以需要一个哑节点res来指向链表的头节点 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* List…

机器学习之集成学习概念介绍

概念 机器学习中的集成学习(Ensemble Learning)是一种通过组合多个模型来提高整体性能的技术。它的基本思想是将多个学习器(弱学习器)组合成一个更强大的学习器,以提高整体性能和泛化能力。集成学习可以在各种机器学习任务中使用,包括分类、回归和聚类。 核心 弱学习器…

Spring自带分布式锁你用过吗?

环境&#xff1a;SpringBoot2.7.12 本篇文章将会为大家介绍有关spring integration提供的分布式锁功能。 1. 简介 Spring Integration 是一个框架&#xff0c;用于构建事件驱动的应用程序。在 Spring Integration 中&#xff0c;LockRegistry 是一个接口&#xff0c;用于管理…

使用Postman测试WebService接口

文章目录 使用Postman测试WebService接口1. 访问wsdl地址2. Postman配置1. URL及Headers设置2. Body设置3. 响应结果 使用Postman测试WebService接口 1. 访问wsdl地址 接口地址如&#xff1a;http://localhost:8101/ws/hello?wsdl 2. Postman配置 1. URL及Headers设置 2. B…

跟着小德学C++之数据库基础

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

【揭秘】sleep()、wait()、park()三种休眠方式的终极对比

在Java中&#xff0c;线程休眠的三种方式包括Thread.sleep、Object.wait和LockSupport.park。Thread.sleep使线程在指定时间后进入休眠&#xff0c;状态为TIMEDWAITING&#xff0c;不会释放锁。Object.wait需在对象锁的保护下调用&#xff0c;会释放该对象的锁&#xff0c;使线…

Java SE入门及基础(13)

流程控制 1. break关键字 应用场景 break只能应用于 while 循环、 do-while 循环、 for 循环和 switch 选择结构 作用 break 应用在循环结构中时&#xff0c;表示终止 break 所在的循环&#xff0c;执行循环结构下面的代码&#xff0c;通常与 if 选择结构配合使用 …

CCS自适应巡航简介-驾驶辅助最初版本

在汽车行业这么多年&#xff0c;接触汽车也有些年头了&#xff0c;最开始接触的驾驶辅助功能就是ACC。 在这里说一说CC的来龙去脉吧~ CCS全称为CRUISE CONTROL SYSTEM&#xff0c;取的是英文首字母。以后看到CCS就要认得这是个啥&#xff1b; 到底有用处呢&#xff0c;如果你…

【ASP.NET Core 基础知识】--中间件--创建自定义中间件

一、为什么需要自定义中间件 自定义中间件在ASP.NET Core中的应用主要有以下几个原因&#xff1a; 满足特定需求&#xff1a; 默认情况下&#xff0c;ASP.NET Core提供了许多内置的中间件来处理常见的任务&#xff0c;如身份验证、授权、静态文件服务等。然而&#xff0c;某些…

leetcode 动态规划(单词拆分)

139.单词拆分 力扣题目链接(opens new window) 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明&#xff1a; 拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词。 …

图解智慧:数据可视化如何助你高效洞悉信息?

在信息爆炸的时代&#xff0c;数据扮演着越来越重要的角色&#xff0c;而数据可视化则成为解读和理解海量数据的得力工具。那么&#xff0c;数据可视化是如何帮助我们高效了解数据的呢&#xff1f;下面我就以可视化从业者的角度来简单聊聊这个话题。 无需深奥的专业知识&#x…

第1章 数据结构与算法介绍

文章目录 1.1 数据结构和算法内容介绍1.1.1 先看几个经典的算法面试题1.1.2 数据结构和算法的重要性1.1.3 本套数据结构和算法内容介绍1.1.4 课程亮点和授课方式 1.1 数据结构和算法内容介绍 1.1.1 先看几个经典的算法面试题  字符串匹配问题&#xff1a;&#xff1a; 有一…

wpf使用Popup封装数据筛选框

(关注博主后,在“粉丝专栏”,可免费阅读此文) 类似于DevExpress控件的功能 这是DevExpress的winform筛选样式,如下: 这是DevExpress的wpf筛选样式,如下: 这是Excel的筛选样式,如下: 先看效果 本案例使用wpf原生控件封装,功能基本上都满足,只是颜色样式没有写…

Kotlin中的委托

在Kotlin中&#xff0c;委托是一种强大的设计模式&#xff0c;它允许一个类将其一些职责委托给另一个类。这种机制通过关键字by来实现。委托有助于代码的重用&#xff0c;降低耦合性&#xff0c;并提供更清晰的类设计。在Kotlin中&#xff0c;有两种主要类型的委托&#xff1a;…

为何我选择山海鲸可视化:五大优势解析

在众多的可视化产品中&#xff0c;我选择了山海鲸可视化&#xff0c;这并非偶然。在对比了其他同类产品后&#xff0c;我发现山海鲸可视化具有许多独特的优势和特点&#xff0c;使得它成为了我心目中的理想选择。下面我简单说一下我选择这款产品的几大原因&#xff0c;希望对在…

最新国内可用GPT4、Midjourney绘画、DALL-E3文生图模型教程

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

【python 的各种模块】(9) 在python使用PIL( 即pillow模块 ) 修改图片

目录 1 导入PIL模块&#xff08;pillow&#xff09; 1.1 PIL的全称&#xff1a;Python Imaging Library 1.2 导入PIL模块 1.2.1 可用的导入形式 1.2.2 常用的导入形式 1.2.3 PIL下面的常用子模块 2 PIL.Image的方法 (读入&#xff0c;生成和显示图片) 2.1 用 PIL.Image…

蓝桥杯AcWing学习笔记 8-2数论的学习(下)

蓝桥杯 我的AcWing 题目及图片来自蓝桥杯C AB组辅导课 数论&#xff08;下&#xff09; 蓝桥杯省赛中考的数论不是很多&#xff0c;这里讲几个蓝桥杯常考的知识点。 约数个数定理 我们如何去求一个数的约数个数呢&#xff1f; N N N分解质因数的结果&#xff1a; N P 1 α…

HTML+CSS-02

阿里巴巴矢量图标库的使用 阿里巴巴网址矢量图标库网址 https://www.iconfont.cn/ 如何使用 选择需要的icon图标加入购物车下载代码 在将解压后的文件夹复制到项目中进入demo_index.html中打开就可以看到示例的三种用法 三种引入方法 Unicode 引用 Unicode 是字体在网页端…

vscode(visual studio code) 免密登陆服务器

1.生成密钥 首先&#xff0c;在本地&#xff0c;打开命令输入框&#xff1a; WinR–>弹出输入框&#xff0c;输入cmd,打开命令框。 然后&#xff0c;在命令框&#xff0c;输入 ssh-keygen -t rsa -C "love"按两次回车键&#xff0c;问你是否重写&#xff0c;选择…