C++ STL-迭代器函數對象適配器

目錄

一.迭代器

二.?函數對象

三.?適配器


一.迭代器

是一種通用的指針類型,可以用來遍歷 STL 容器中的元素。

具有以下作用和意義:

  1. 提供一種通用的方式來訪問容器中的元素。
  2. 允許對不同類型的容器進行統一的操作。
  3. 增強了代碼的靈活性和可擴展性。

一些常用的 API 及其詳解如下:

  • begin():返回容器中第一個元素的迭代器。
  • end():返回超出容器末尾的迭代器。
  • ++iter:向前移動迭代器。
  • --iter:向后移動迭代器。

下面是一個簡單的示例代碼:

#include <vector>
#include <iostream>int main() {std::vector<int> numbers = { 1, 2, 3, 4, 5 };std::vector<int>::iterator iter = numbers.begin();while (iter != numbers.end()) {std::cout << *iter << " ";++iter;}return 0;
}

在這個示例中,通過迭代器?iter?遍歷了?numbers?容器中的每個元素,并輸出它們。

二.?函數對象

是一種可調用的對象,用于各種算法中。

作用和意義

  1. 提供了一種通用的方式來傳遞自定義的操作。
  2. 增強了算法的靈活性和可擴展性。
  3. 可以封裝復雜的邏輯,使代碼更簡潔、易維護。

常用 API 詳解

  • operator():用于定義函數對象的調用操作。
  • 可以接受參數,并返回特定類型的結果。

下面是一個簡單的示例代碼:

#include <algorithm>
#include <vector>
#include<iostream>// 自定義函數對象,用于比較兩個整數的大小
struct IntComparer {bool operator()(int a, int b) {return a < b;}
};int main() {std::vector<int> numbers = { 5, 3, 1, 4, 2 };// 使用自定義的函數對象進行排序std::sort(numbers.begin(), numbers.end(), IntComparer());// 輸出排序后的元素for (int num : numbers) {std::cout << num << " ";}return 0;
}

在上述示例中,定義了一個自定義的函數對象?IntComparer,它實現了比較兩個整數大小的邏輯。然后,使用這個函數對象作為參數傳遞給?std::sort()?算法,對?numbers?容器進行排序。

三.?適配器

是一種將一個類或函數轉換為符合特定需求的接口的工具。

作用和意義

  1. 提供了一種方便的方式來適配不同的需求。
  2. 增加了代碼的靈活性和可重用性。
  3. 使得原本不符合特定接口的類或函數能夠在特定場景中使用。

常用 API 詳解

  • std::adapter:提供了一些常見的適配器類型,如stackqueue等。
  • push():向適配器中添加元素。
  • pop():從適配器中取出元素。

下面是一個簡單的示例代碼:

#include <stack>
#include <iostream>int main() {std::stack<int> myStack;myStack.push(5);myStack.push(3);myStack.push(1);while (!myStack.empty()) {int element = myStack.top();std::cout << element << " ";myStack.pop();}return 0;
}

在上述示例中,使用std::stack適配器來實現棧的操作。通過push()方法向棧中添加元素,通過pop()方法從棧中取出元素

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

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

相關文章

The Best Toolkit 最好用的工具集

The Best Toolkit 工欲善其事&#xff0c;必先利其器&#xff0c;整理過往工作與生活中遇到的最好的工具軟件 PDF合并等 PDF24 Tools PDF查看器 SumatraPDF 可以使用黑色來查看&#xff0c;相對不傷眼睛&#xff0c;也有電子書相關的閱讀器 Kindle pdf裁邊工具 briss 軟件卸載…

【C++題解】1085 - 尋找雷劈數

問題&#xff1a;1085 - 尋找雷劈數 類型&#xff1a;for循環 題目描述&#xff1a; 把整數 3025 從中剪開分為 30 和 25 兩個數&#xff0c;此時再將這兩數之和平方&#xff0c;計算結果又等于原數。 (3025)(3025)55553025 &#xff0c;這樣的數叫“雷劈數”。 求所有符合這…

Photoshop版本選擇及系統要求

1、ps2018cc/2020cc版本 適合新手&#xff0c;增加了很多智能化操作&#xff0c;非常方便好上手。 2020&#xff1a; 2、ps2015版本 cc2015版本不論是功能還是硬件上&#xff0c;都是不二選擇&#xff0c;適合于配置較低的電腦&#xff0c;該有的基本功能它都有。 3、2021/2…

std::numeric_limits::max和宏定義重復報錯問題

問題描述 今天在編譯Beckhoff ADS開源組件的時候發現編譯報錯&#xff0c;報錯代碼如下 long AdsDevice::ReadReqEx2(uint32_t group, uint32_t offset, size_t length, void* buffer, uint32_t* bytesRead) const {if (length > std::numeric_limits<uint32_t>::ma…

Algorand 的復興之路:改變游戲規則,打造 RWA 第一公鏈

TLDR 發布 AlgoKit 2.0&#xff0c;支持 Python 原生語言&#xff0c;打造開發者友好的開發環境&#xff0c;Algorand 的開發者社區規模迅速擴大。 升級共識激勵機制&#xff0c;用 ALGO 獎勵共識節點參與共識的執行&#xff0c;增加 ALGO 的應用場景&#xff0c;同時進一步確…

GB28181的主動、被動的含義

GB28181有點象視頻會議&#xff1a; 終端通過SIP登錄服務器。管理員點擊某個終端&#xff0c;進行視頻。 就是這個主動、被動沒有聽說。于是問了同事&#xff0c;他說&#xff1a; 主動被動是從服務器角度來看的。所謂被動&#xff0c;就是服務器開一個端口&#xff0c;被動接…

鋼結構乙級資質延期,企業如何降低經營風險

當企業面臨鋼結構乙級資質延期時&#xff0c;為了降低經營風險&#xff0c;可以采取以下措施&#xff1a; 1. 提前規劃與準備 資質延續規劃&#xff1a;在資質到期前&#xff0c;提前規劃資質延續的相關工作&#xff0c;包括準備所需材料、明確流程和時間節點等。 項目評估&…

js去重的幾種方式

在JavaScript中&#xff0c;有多種方式可以實現數組去重。以下是幾種常見的方式&#xff1a; 使用Set數據結構&#xff1a;使用Set可以快速實現數組去重&#xff0c;Set會自動排除重復的元素。例如&#xff1a; const arr [1, 2, 3, 3, 4, 4, 5]; const uniqueArr [...new S…

如何從官網下載 mysql 二進制安裝包

一.下載二進行包 1. 官網網址: https://www.mysql.com/ 如圖所示進入官網 2. 點擊 DOWNLOADS ,進入如下圖 在該頁面找到 MySQL Community (GPL) Downloads 點進去 如上圖頁面&#xff0c;找到 MySQL Community Server 在點進去 下載 linux 通用版 點擊最下面 Compressed …

(十四)統計學基礎練習題八(選擇題T351-400)

本文整理了統計學基礎知識相關的練習題&#xff0c;共50道&#xff0c;適用于想鞏固統計學基礎或備考的同學。來源&#xff1a;如荷學數據科學題庫&#xff08;技術專項-統計學三&#xff09;。序號之前的題請看往期文章。 351&#xff09; 352&#xff09; 353&#xff09; 3…

C++vector部分實現及感悟

myvector.h #pragma once #include<assert.h> #include<iostream> #include<vector> using namespace std; namespace bit {template<class T>//必須使用typename場景\template<typename T>與template<class T>一般情況下這兩個通用&#…

Jmeter實戰教程入門講解

前言 通過前面對Jmeter元件的講解&#xff0c;大家應該都知道常用元件的作用和使用了。編寫Jmeter腳本前我們需要知道Jmeter元件的執行順序&#xff0c;可以看看我這篇性能測試學習之路&#xff08;三&#xff09;—初識Jmeter來了解下。下面我將以工作中的一個簡單的實例帶大…

Flutter 中的 TableCell 小部件:全面指南

Flutter 中的 TableCell 小部件&#xff1a;全面指南 Flutter 是一個功能強大的 UI 框架&#xff0c;由 Google 開發&#xff0c;允許開發者使用 Dart 語言構建跨平臺的移動、Web 和桌面應用。在 Flutter 的豐富組件庫中&#xff0c;TableCell 是一個用于創建表格單元格的組件…

企業打款驗證API在Java、Python、PHP中的使用教程

隨著企業銀行賬號數量的增加和銀行間的連接方式不斷豐富&#xff0c;企業在進行資金交易時需要確保所填寫的收款方賬戶信息的準確性和合法性&#xff0c;以避免資金損失和風險。然而&#xff0c;由于銀行數量眾多、地域分布廣泛&#xff0c;不同銀行間的賬戶驗證機制和信息交互…

vue前端實現頁面禁止縮放 前端適配問題處理 前端項目多端適配解決方案

在前端項目中,如果一個系統頁面可以縮放可能會導致多種異常情況,這些異常情況涉及到頁面布局、元素尺寸、事件觸發、響應式設計和用戶體驗等方面。 1.布局錯亂:頁面元素在縮放后可能會出現錯位、重疊或部分隱藏的情況,導致頁面布局混亂,影響用戶對頁面內容的理解和操作。這…

【云原生】kubernetes中secret原理詳解與應用實戰

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

讀AI未來進行式筆記02深度偽造

1. 計算機視覺 1.1. 在人的六感之中&#xff0c;視覺是最重要的 1.1.1. 人類只要看上一眼視頻&#xff0c;就能瞬間在腦海中抓取并消化內容和信息 1.1.2. 人類能夠對事物進行廣義的理解和抽象的認知&#xff0c;即使同一物體在不同的角度…

聲量2024 | 內容創作者,該怎樣保護你的知識產權

點擊文末“閱讀原文”即可參與節目互動 剪輯、音頻 / 卷圈 運營 / SandLiu 卷圈 監制 / 姝琦 封面 / 姝琦Midjourney 產品統籌 / bobo 場地支持 / 阿那亞 聯合制作 / 聲量The Power of Voice 特別鳴謝 / 深夜談談播客網絡 本期節目錄制于第二屆「聲量The Power of Voic…

opencascade 布爾運算筆記

BRepAlgoAPI_Common 對兩個topods求解 沒有公共部分也返回結果了 我想要的結果是沒有公共部分返回false 在 Open CASCADE 中使用 BRepAlgoAPI_Common 進行布爾操作時&#xff0c;即使兩個 TopoDS_Shape 沒有公共部分&#xff0c;操作仍會返回一個結果。為了判斷兩個形狀是否確…

vue3封裝echarts組件---通俗易懂

1、封裝的原因 如果在vue項目中有多個組件或者同個組件多出地方需要不同的圖表&#xff0c;因此自己封裝一個方便多次復用的Mycharts圖表組件。 2、具體步驟&#xff1a; 2.1 安裝echarts pnpm i echarts --save 2.2 新建MyCharts組件 : ~components/echarts/MyCharts.vu…