新闻中心

C++ vector数组去重_C++ unique函数用法与去重算法实现

2025-11-28
浏览次数:
返回列表
使用sort+unique+erase组合可高效去重,先排序使重复元素相邻,再用unique将重复元素移至末尾并返回新逻辑尾部迭代器,最后通过erase删除冗余元素,实现全局去重。

c++ vector数组去重_c++ unique函数用法与去重算法实现

在C++中,对vector数组进行去重是一个常见需求。最常用且高效的方法是结合std::sortstd::unique函数。需要注意的是,std::unique并不会真正删除元素,而是将重复元素移到容器末尾,因此需要配合erase方法才能实现真正的去重。

unique函数的基本用法

std::unique定义在<algorithm></algorithm>头文件中,用于去除**连续重复**的元素。它会遍历区间,将相邻的重复元素“压缩”,只保留第一个,并返回指向新逻辑结尾的迭代器。

基本语法如下:

std::unique(vec.begin(), vec.end());

但使用前必须先排序,否则只能去除连续重复项,无法实现全局去重。

vector去重的标准做法

完整的去重流程包含三步:排序、去重、擦除。代码示例如下:

#include
#include gorithm>
using namespace std;

vector vec = {5, 2, 8, 2, 1, 5, 3};

// 1. 排序
std::sort(vec.begin(), vec.end());

// 2. 去重(移动重复元素到末尾)
auto it = std::unique(vec.begin(), vec.end());

// 3. 删除冗余元素
vec.erase(it, vec.end());

最终vec中将只包含{1, 2, 3, 5, 8},无重复元素。

N世界 N世界

一分钟搭建会展元宇宙

N世界 138 查看详情 N世界

自定义去重算法实现

如果不使用STL函数,也可以手动实现去重逻辑。例如使用额外set记录已出现元素:

vector result;
unordered_set seen;

for (int x : vec) {
  if (seen.find(x) == seen.end()) {
    result.push_back(x);
    seen.insert(x);
  }
}

这种方法保持原始顺序,但时间复杂度为O(n),空间开销较大。若允许排序,则推荐使用sort + unique + erase组合,效率更高。

注意事项

unique仅对连续重复元素有效,因此排序是前提。另外,对于自定义类型,需重载==操作符或提供比较函数。

如果希望保留原顺序又避免set开销,可考虑使用双指针原地去重(适用于有序数据)。

基本上就这些。标准做法简洁高效,适合大多数场景。理解其原理有助于灵活应对不同需求。不复杂但容易忽略细节。

以上就是C++ vector数组去重_C++ unique函数用法与去重算法实现的详细内容,更多请关注其它相关文章!


# 第一个  # 连云港网站推广哪家好  # 哪里推广网站效果好  # 医美营销怎么推广好呢知乎  # seo是sem  # 外贸网站推广排名  # 京东商城网站页面优化  # 伊犁网站优化公司  # 雨湖区微营销推广软件  # 西夏区整体网络营销推广  # 固原农产品网站建设  # 遍历  # 数组去重  # 迭代  # 是一个  # 运算符  # 的是  # 尼克  # 自定义  # 数据结构  # 进阶  # red  # c++  # go 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 绝地鸭卫平a核爆刀流玩法攻略  蛙漫漫画官网在线入口 蛙漫全本漫画免费阅读平台  AO3最新入口2025公告_AO3中文官网合集  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  如何使用Go和Martini动态服务解码后的图片  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  利用Bokeh CustomJS动态控制DataTable列可见性  CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】  Go语言中动态执行代码字符串的策略与实践  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  Django通过AJAX异步上传图片并保存至模型的完整指南  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  京东单号查询入口_京东快递订单追踪入口  单12V-2&#215;6实现为RTX 5090供电750W!甚至都没敢跑分  Lar*el DB::listen 事件中的查询执行时间单位解析  mc.js官网登录入口 mc.js官方登录入口最新版  痛风发作了怎么办? 快速止痛和后期饮食调理  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  J*a TimerTask中HashMap意外清空的深层原因与解决方案  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  J*a应用程序首次运行自动创建文件与目录的最佳实践  DLsite中文平台入口 DLsite官网内容在线查看  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  字由网在线版登录地址 字由网网页版安全入口  CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  在React函数组件中利用原生HTML5进行邮箱地址验证  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  解决Flask中Quill编辑器内容提交失败及TypeError的指南  构建轻量级网站内部消息系统:Formspree 集成指南  必由学官方网站入口 必由学学生教师共用登录通道  凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法  响应式图片在网页设计中的正确实现方法  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  Golang如何使用net/url解析URL_Golang URL解析与处理方法  C++如何生成随机数_C++ random库使用方法与范围设置  基于动态规划的房屋花卉种植最小成本算法详解  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  我的世界官方游戏入口 我的世界官网平台直达链接  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  小米Civi 4录制视频过暗_小米Civi 4亮度优化  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法 

搜索