c++-迭代器類別仿函數常用算法函數

C++常用算法函數

1. 前置知識

1.1 迭代器的類別

C++中,迭代器是 STL 容器庫的核心組件之一,具有舉足輕重的作用,它提供了一種 統一的方式來訪問和遍歷容器,而無需關心底層數據結構的具體實現。迭代器類似指針,但比指針更通用,可以用于各種容器類型。

迭代器可以分為兩類:

  1. 方向性質

    • 單向迭代器(Forward Iterator

    • 雙向迭代器(Bidirectional Iterator

    • 隨機訪問迭代器(Random Access Iterator

    • 輸入迭代器(Input Iterator

    • 輸出迭代器(Output Iterator

  2. 遍歷方向

    • 正向迭代器(iterator

    • 反向迭代器(reverse_iterator

特性輸入迭代器輸出迭代器單向迭代器雙向迭代器隨機迭代器
讀(*iter????
寫(*iter =????
++?????
??
+?
-?
  • 常見的單向迭代器:forward_listunordered_mapunordered_set

  • 常見的雙向迭代器:listmapset

  • 常見的隨機迭代器:vectorstringdeque

1.2. 仿函數

仿函數是C++中一種行為類似函數的對象,通過重載函數調用運算符operator()實現。它們比普通函數更靈活,比函數指針更具有可讀性,并且可以作為模板參數傳遞。

1.2.1 less仿函數
#include <functional>template <typename T>
struct less {bool operator() (const T& x , const T& y) const { return x < y; }
};
1.2.2 greater仿函數
#include <functional>template <typename T>
struct greater {bool operator() (const T& x , const T& y) const { return x > y; }
};

2. find

std::find 在?[first, last)?范圍內線性搜索第一個等于?val?的元素。它使用?operator==?來比較元素。

函數原型

template <class InputIterator, class T> 
InputIterator find (InputIterator first, InputIterator last, const T& val);

參數說明

  • first、last:一段左閉右開的迭代器區間。

  • val:查找的值。

返回值:

  • 如果找到指定值,返回指向該元素的迭代器。

  • 如果未找到,返回?last?迭代器(end())。

3. swap

std::swap 是 C++ 標準庫中用于交換兩個對象的函數模板。

函數原型:

template <class T> 
void swap (T& a, T& b);

參數說明

  • a:第一個要交換的值。

  • b:第二個要交換的值。

4. reverse

std::reverse?是 C++ 標準庫中用于反轉指定范圍內元素順序的函數模板。

函數原型

template <class BidirectionalIterator>  
void reverse (BidirectionalIterator first, BidirectionalIterator last);

參數說明

  • first、last:一段左閉右開的迭代器區間。

5. sort

std::sort?是 C++ 標準庫中用于排序的核心算法(默認升序)。

函數原型

// 1.默認
template <class RandomAccessIterator>  
void sort (RandomAccessIterator first, RandomAccessIterator last);
// 2.重載
template <class RandomAccessIterator, class Compare>  
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

參數說明

  • first、last:一段左閉右開的迭代器區間。

  • comp:比較函數對象,決定升序還是降序。

    • 升序:less 仿函數。

    • 降序:greater 仿函數。

sort底層是快排

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917056.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python深度學習框架TensorFlow與Keras的實踐探索

基礎概念與安裝配置 TensorFlow核心架構解析 TensorFlow是由Google Brain團隊開發的開源深度學習框架&#xff0c;其核心架構包含數據流圖&#xff08;Data Flow Graph&#xff09;和張量計算系統。數據流圖通過節點表示運算操作&#xff08;如卷積、激活函數&#xff09;&…

c# net6.0+ 安裝中文智能提示

https://github.com/stratosblue/IntelliSenseLocalizer 1、安裝tool dotnet tool install -g islocalizer 2、 安裝IntelliSense 文件&#xff0c;安裝其他net版本修改下版本號 安裝中文net6.0采集包 islocalizer install auto -m net6.0 -l zh-cn 安裝中英文雙語net6.0采集包…

【建模與仿真】二階鄰居節點信息驅動的節點重要性排序算法

導讀&#xff1a; 在復雜網絡中&#xff0c;挖掘重要節點對精準推薦、交通管控、謠言控制和疾病遏制等應用至關重要。為此&#xff0c;本文提出一種局部信息驅動的節點重要性排序算法Leaky Noisy Integrate-and-Fire (LNIF)。該算法通過獲取節點的二階鄰居信息計算節點重要性&…

指令微調Qwen3實現文本分類任務

參考文檔&#xff1a; SwanLab入門深度學習&#xff1a;Qwen3大模型指令微調 - 肖祥 - 博客園 vLLM&#xff1a;讓大語言模型推理更高效的新一代引擎 —— 原理詳解一_vllm 原理-CSDN博客 概述 為了實現對100個標簽的多標簽文本分類任務&#xff0c;前期調用gpt-4o進行prom…

【機器學習-3】 | 決策樹與鳶尾花分類實踐篇

0 序言 本文將深入探討決策樹算法&#xff0c;先回顧下前邊的知識&#xff0c;從其基本概念、構建過程講起&#xff0c;帶你理解信息熵、信息增益等核心要點。 接著在引入新知識點&#xff0c;介紹Scikit - learn 庫中決策樹的實現與應用&#xff0c;再通過一個具體項目的方式來…

【數字投影】折幕影院都是沉浸式嗎?

折幕影院作為一種現代化的展示形式&#xff0c;其核心特點在于通過多塊屏幕拼接和投影融合技術&#xff0c;打造更具包圍感的視覺體驗。折幕影院設計通常采用多折幕結構&#xff0c;如三折幕、五折幕等&#xff0c;利用多臺投影機的協同工作&#xff0c;呈現無縫銜接的超大畫面…

數據結構——圖(三、圖的 廣度/深度 優先搜索)

一、廣度優先搜索(BFS)①找到與一個頂點相鄰的所有頂點 ②標記哪些頂點被訪問過 ③需要一個輔助隊列#define MaxVertexNum 100 bool visited[MaxVertexNum]; //訪問標記數組 void BFSTraverse(Graph G){ //對圖進行廣度優先遍歷&#xff0c;處理非連通圖的函數 for(int i0;i…

直擊WAIC | 百度袁佛玉:加速具身智能技術及產品研發,助力場景應用多樣化落地

7月26日&#xff0c;2025世界人工智能大會暨人工智能全球治理高級別會議&#xff08;WAIC&#xff09;在上海開幕。同期&#xff0c;由國家地方共建人形機器人創新中心&#xff08;以下簡稱“國地中心”&#xff09;與中國電子學會聯合承辦&#xff0c;百度智能云、中國聯通上海…

2025年人形機器人動捕技術研討會將在本周四召開

2025年7月31日愛迪斯通所主辦的【2025人形機器動作捕捉技術研討會】是攜手北京天樹探界公司線下活動結合線上直播的形式&#xff0c;會議將聚焦在“動作捕捉軟硬件協同&#xff0c;加速人形機器人訓練”&#xff0c;將深度講解多項核心技術&#xff0c;包含全球知名的慣性動捕大…

Apple基礎(Xcode①-項目結構解析)

要運行設備之前先選擇好設備Product---->Destination---->選擇設備首次運行手機提示如出現 “未受信任的企業級開發者” → 手機打開 設置 ? 通用 ? VPN與設備管理 → 信任你的 Apple ID 即可ContentView 是 SwiftUI 項目里 最頂層、最主界面 的那個“頁面”&#xff0…

微服務 02

一、網關路由網關就是網絡的關口。數據在網絡間傳輸&#xff0c;從一個網絡傳輸到另一網絡時就需要經過網關來做數據的路由和轉發以及數據安全的校驗。路由是網關的核心功能之一&#xff0c;決定如何將客戶端請求映射到后端服務。1、快速入門創建新模塊&#xff0c;引入網關依賴…

04動手學深度學習筆記(上)

04數據操作 import torch(1)張量表示一個數據組成的數組&#xff0c;這個數組可能有多個維度。 xtorch.arange(12) xtensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])(2)通過shape來訪問張量的形狀和張量中元素的總數 x.shapetorch.Size([12])(3)number of elements表…

MCU中的RTC(Real-Time Clock,實時時鐘)是什么?

MCU中的RTC(Real-Time Clock,實時時鐘)是什么? 在MCU(微控制器單元)中,RTC(Real-Time Clock,實時時鐘) 是一個獨立計時模塊,用于在系統斷電或低功耗狀態下持續記錄時間和日期。以下是關于RTC的詳細說明: 1. RTC的核心功能 精準計時:提供年、月、日、時、分、秒、…

Linux 進程調度管理

進程調度器可粗略分為兩類&#xff1a;實時調度器(kernel)&#xff0c;系統中重要的進程由實時調度器調度&#xff0c;獲得CPU能力強。非實時調度器(user)&#xff0c;系統中大部分進程由非實時調度器調度&#xff0c;獲得CPU能力弱。實時調度器實時調度器支持的調度策略&#…

基于 C 語言視角:流程圖中分支與循環結構的深度解析

前言&#xff08;約 1500 字&#xff09;在 C 語言程序設計中&#xff0c;控制結構是構建邏輯的核心骨架&#xff0c;而流程圖作為可視化工具&#xff0c;是將抽象代碼邏輯轉化為直觀圖形的橋梁。對于入門 C 語言的工程師而言&#xff0c;掌握流程圖與分支、循環結構的對應關系…

threejs創建自定義多段柱

最近在研究自定義建模&#xff0c;有一個多斷柱模型比較有意思&#xff0c;分享下&#xff0c;就是利用幾組點串&#xff0c;比如上中下&#xff0c;然后每組點又不一樣多&#xff0c;點續還不一樣&#xff0c;(比如第一個環的第一個點在左邊&#xff0c;第二個環在右邊)&#…

Language Models are Few-Shot Learners: 開箱即用的GPT-3(四)

Result續 Winograd-Style Tasks Winograd-Style Tasks 是自然語言處理中的一類經典任務。它源于 Winograd Schema Challenge(WSC),主要涉及確定代詞指的是哪個單詞,旨在評估模型的常識推理和自然語言理解能力。 這個任務中的具體通常包含高度歧義的代詞,但從語義角度看…

BGP高級特性之認證

一、概述BGP使用TCP作為傳輸協議&#xff0c;只要TCP數據包的源地址、目的地址、源端口、目的端 口和TCP序號是正確的&#xff0c;BGP就會認為這個數據包有效&#xff0c;但數據包的大部分參數對于攻擊 者來說是不難獲得的。為了保證BGP免受攻擊&#xff0c;可以在BGP鄰居之間使…

商旅平臺怎么選?如何規避商旅流程中的違規風險?

在中大型企業的商旅管理中&#xff0c;一個典型的管理“黑洞”——流程漏洞與超標正持續吞噬企業成本與管理效能&#xff1a;差標混亂、審批脫節讓超規訂單頻頻闖關&#xff0c;不僅讓企業商旅成本超支&#xff0c;還可能引發稅務稽查風險。隱性的合規風險&#xff0c;比如虛假…

Anaconda的常用命令

Anaconda 是一個用于科學計算、數據分析和機器學習的 Python 發行版&#xff0c;包含了大量的預安裝包。它配有 conda 命令行工具&#xff0c;方便用戶管理包和環境。以下是一些常用的 conda 命令和 Anaconda 的常見操作命令&#xff0c;幫助你高效管理環境和包。1. 環境管理創…