[原創](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.pswp.cn/bicheng/71589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71589.shtml
英文地址,請注明出處:http://en.pswp.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地址與子網掩碼基礎 在深…