[原创](Modern C++)现代C++的关键性概念: 学习新算法: std::unique_copy

[作者]
常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共24年]
职业生涯: 22年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
在现代C++编程中, 标准模板库(STL)是开发者不可或缺的工具箱, 它提供了大量高效的算法来处理数据结构. 其中, std::unique_copy是一个功能强大且灵活的算法, 专门用于从一个范围中复制元素到另一个范围, 同时去除相邻的重复元素. 与直接修改源数据的std::unique不同, std::unique_copy保留了原始数据不变, 将处理后的结果输出到新的容器中. 这种特性使其在数据清洗、去重以及序列处理等场景中尤为实用.

[代码演示]
下面的示例代码展示了std::unique_copy的使用方式, 首先创建了一个包含重复字符的字符串视图, 并用一个空的std::wstring作为目标容器来存储处理结果. 随后, 通过两种不同的调用方式, 展示了默认行为与自定义谓词对相邻重复数据处理的不同效果. 

int main()
{std::wstring_view wsv_Demo{ L"11112222333344445555" };std::wstring wstr_Unique;// 方法1: 默认去重, 去除所有相邻的重复字符, 结果为 "12345"std::unique_copy(wsv_Demo.cbegin(), wsv_Demo.cend(), std::back_inserter(wstr_Unique));// 方法2: 自定义去重, 仅去除相邻的 '2', 结果为 "11112333344445555"wstr_Unique = L"";std::unique_copy(wsv_Demo.cbegin(), wsv_Demo.cend(), std::back_inserter(wstr_Unique),[](wchar_t wchar_A, wchar_t wchar_B) {return wchar_A == L'2' && wchar_B == L'2';});return 0;
}

[代码作用]
1. 方法1 – 默认行为
   使用std::unique_copy时, 默认采用operator==进行比较. 这意味着对于连续重复的字符, 只保留第一次出现的元素. 对于示例中的字符串"11112222333344445555", 每个字符组都会被压缩为一个单独的字符, 最终结果为"12345".

2. 方法2 - 自定义谓词
   通过传入一个lambda表达式, 可以自定义重复元素的判断规则. 这里仅对字符'2'进行特殊处理——只有当两个相邻字符均为L'2'时返回true, 将它们视为重复; 而对于其他字符, 它们连续出现, mbda也总返回false, 这些重复数据依然被完整保留. 这最终, 这种定制处理, 的结果为"11112333344445555", 留了其他字符的完整性, 指定字符做了合并处理. 

[总结]
通过上述示例, 可以清晰地看到std::unique_copy在现代C++中的核心价值和灵活性:

*高效去重: 默认模式下, std::unique_copy能快速去除序列中所有相邻的重复元素, 适用于需要简洁输出的场景, 如数据清理或预处理.

*灵活控制: 通过自定义谓词, 可以精确指定去重条件, 从而实现更复杂的数据处理逻辑, 满足特定的业务需求.

*非破坏性: 与std::unique不同, std::unique_copy不会修改源数据, 而是将结果复制到新容器中, 保障了数据安全性.

掌握std::unique_copy的使用, 不仅能提升代码的简洁性和可读性, 还能让在处理字符串、数组或其他序列数据时更加得心应手。无论是简单去重还是复杂条件过滤, 这一算法都是现代C++开发者工具箱中不可或缺的一部分.

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

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

相关文章

前端(vue)学习笔记(CLASS 1):vue框架入门

1、vue上手 概念:vue是一个用于构建用户界面的渐进式框架 vue的两种使用方式: 1、vue的核心包开发 场景:局部模块改造 2、vue核心包&vue插件工程化开发 场景:整站开发 1、创建实例 核心步骤 1、准备容器(…

synchronized锁字符串

示例一 在没有使用synchronized锁的情况下: import java.util.HashMap; import java.util.Map;public class NonSynchronizedSchoolExample {private static final Map<String, Integer> schoolCountMap new HashMap<>(); // 存储每个学校的交卷数量public sta…

1.14作业

1 if($x[scheme]http||$x[scheme]https){ $ip gethostbyname($x[host]); echo </br>.$ip.</br>; if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {die(ip!); }echo file_get_contents($_POST[url]);可以DNS重…

Hopper架构 GEMM教程

一 使用 1.1 makefile compile:nvcc -arch=sm_90a -lcuda -lcublas -std=c++17 matmul_h100_optimal.cu -o testrun:./test加入-lcublas,不然会有函数无法被识别 二 代码分析 2.1 kernel外参数分析 2.1.1 基本参数 constexpr int BM = 64*2;constexpr int BN = 256;cons…

DeepSeek模型快速部署教程-搭建自己的DeepSeek

前言&#xff1a;在人工智能技术飞速发展的今天&#xff0c;深度学习模型已成为推动各行各业智能化转型的核心驱动力。DeepSeek 作为一款领先的 AI 模型&#xff0c;凭借其高效的性能和灵活的部署方式&#xff0c;受到了广泛关注。无论是自然语言处理、图像识别&#xff0c;还是…

数据仓库、数据湖和数据湖仓

数据仓库、数据湖和数据湖仓是三种常见的数据存储和管理技术&#xff0c;各自有不同的特点和适用场景。以下是它们的详细比较&#xff1a; 1. 数据仓库&#xff08;Data Warehouse&#xff09; 定义&#xff1a;用于存储结构化数据&#xff0c;经过清洗、转换和建模&#xff…

学习aigc

DALLE2 论文 Hierarchical Text-Conditional Image Generation with CLIP Latents [2204.06125] Hierarchical Text-Conditional Image Generation with CLIP LatentsAbstract page for arXiv paper 2204.06125: Hierarchical Text-Conditional Image Generation with CLIP L…

POI pptx转图片

前言 ppt页面预览一直是个问题&#xff0c;office本身虽然有预览功能但是收费&#xff0c;一些开源的项目的预览又不太好用&#xff0c;例如开源的&#xff1a;kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老&#xff0c;使用版本较旧 <dependency><gro…

零基础学python--------第三节:Python的流程控制语法

Python&#xff0c;浮点数 11.345(单&#xff1a;4个字节&#xff0c; 双&#xff1a;8个字节) 。 十进制的数字25 ---> 11001 讲一个小数转化为二进制&#xff1a; 不断的乘以2 。取整数部分。 十进制的0.625 ----> 二进制&#xff1a; 0&#xff0c; 101 。 0.3 ---…

2025.2.21 Restless And Brave

今天是2025年的2月21日&#xff0c;星期五。 距离考研出分还有两天半的时间。 这种时候&#xff0c;我想考的特别好的同学或者考的特别差的同学都不会太焦虑&#xff0c;只有我这种考的不上不下的人才会焦虑。 我曾不止一次的想过如何面对失败&#xff0c;但每每想到这个问题…

骶骨神经

骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术&#xff08;七&#xff09; 勇闯禁区 骶骨肿瘤切除术

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…

Ubuntu编译ZLMediaKit

下载 git clone https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init安装工具 sudo apt install -y build-essential sudo apt install -y gcc g sudo apt install -y cmakesudo apt install -y build-essential cmake git libssl-dev libsdl1.…

如何做接口自动化测试?

一、前言 接口通俗来讲就是前端和后段之间传输数据的桥梁&#xff0c;注意&#xff1a;不是每一个项目都有接口&#xff0c;一些大型项目是前后端分离的&#xff0c;那么他们怎么实现数据的传递和返回呢&#xff1f;在通俗来讲就是前端和后段都有一个模拟参数数据 二、接口自…

数据分析和数据挖掘的工作内容

基本的数据分析工作通常包含以下几个方面的内容&#xff1a; 确定目标&#xff08;输入&#xff09;&#xff1a;理解业务&#xff0c;确定指标口径。获取数据&#xff1a;数据仓库&#xff08;SQL提数&#xff09;、电子表格、三方接口、网络爬虫、开放数据集等。清洗数据&am…

基于Python+Vue开发的反诈视频宣传管理系统源代码

项目简介 该项目是基于PythonVue开发的反诈视频宣传管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的反…

StarRocks FE leader节点CPU使用率周期性的忽高忽低问题分析

背景 本文基于 StarRocks 3.3.5 最近在做一些 StarRocks 相关的指标监控的时候&#xff0c;看到了FE master的CPU使用率相对其他FE节点是比较高的&#xff0c;且 呈现周期性的变化&#xff08;周期为8分钟&#xff09;&#xff0c; 于此同时FE master节点的GC频率相对于其他节…

第37章 合作之路与占坑成功

在春寒料峭的时节&#xff0c;那丝丝寒意宛如一缕缕若有若无的轻烟&#xff0c;在空气中悄然弥漫。锐创所的会议室&#xff0c;宛如一个被岁月尘封的神秘空间&#xff0c;暖黄色的灯光晕染开来&#xff0c;像是为整个房间披上了一层朦胧的薄纱&#xff0c;陈旧却又带着几分温馨…

Webpack打包优化

在使用 Webpack 打包项目时&#xff0c;随着项目规模的扩大&#xff0c;构建时间和打包产物的体积可能会逐渐增加。为了提高构建性能和减小打包产物的体积&#xff0c;可以采取以下几种 Webpack 打包优化 的方法。 1. 使用 mode 配置 Webpack 通过 mode 配置来指定构建模式。…

计算机专业知识【深入理解IP网段:192.168.1.1/24 与 192.168.1.0/24】

在网络世界里&#xff0c;IP地址和网段是非常基础却又至关重要的概念。很多朋友在看到类似 192.168.1.1/24 和 192.168.1.0/24 这样的表述时&#xff0c;可能会感到困惑。今天&#xff0c;我们就来详细剖析一下它们的含义以及两者之间的关系。 一、IP地址与子网掩码基础 在深…