STL源碼剖析 第八章 配接器

  • 設計模式:將一個類的接口轉化為另外一個類的接口

配接器的概觀和分類

  • 改變仿函數接口? 函數配接器? ;queue和stack 通過修飾deque函數接口來實現
  • 改變容器接口? ? ? 容器配接器? ; insert、reverse、iostream 等iterators他們的接口可以由iterator獲得

insert?iterator

  • 將一般迭代器的賦值操作轉變為插入操作
  • 例子:尾部插入 back_insert_iterator ; 頭部插入 front_insert_iterator ;任意位置 insert_insert_iterator
  • 對應的函數封裝

Reverse Iterators

  • ?將迭代器的行進方向進行逆轉,使得operator++變成 后退操作;operator--變成前進操作
  • 主要目的是為了 從尾端進行前進的算法上

Iostream Iterators

  • 將迭代器綁定到某一個 iostream對象身上
  • 例子:綁定到istream(std::cin) 稱為 istream_iterator,擁有輸入功能
  • 例子:綁定到istream(std::cout) 稱為 ostream_iterator,擁有輸出功能,用于屏幕輸出
  • 改變迭代器接口? ?迭代器配接器
#include <iterator>
#include <deque>
#include <algorithm>
#include <iostream>int main(){//將outite綁定到cout//每次對 outite 指派一個元素,隨后接一個" "std::ostream_iterator<int>outite(std::cout," ");int ia[] = {0,1,2,3,4,5};std::deque<int>id(ia,ia+6);//將所有的元素拷貝到outite(也就是拷貝到cout)std::copy(id.begin(),id.end(),outite); //0 1 2 3 4 5std::cout << '\n';//將ia[] 的部分元素拷貝到id內,使用front_insert_iterator//注意:front_insert_iterator會將assign 操作改為push_front操作//因為vector不支持push_front()std::copy(ia+1,ia+2, std::front_inserter(id));std::copy(id.begin(),id.end(),outite);std::cout << '\n';std::copy(ia+3,ia+4, std::back_inserter(id));std::copy(id.begin(),id.end(),outite);std::cout << '\n';//搜尋元素5所在的位置std::deque<int>::iterator ite = std::find(id.begin(),id.end(),5);std::copy(ia+0,ia+3, std::inserter(id,ite));std::copy(id.begin(),id.end(),outite);std::cout << '\n';//將所有元素逆向拷貝//使用rbegin() 和 rend() 關聯到revere_iteratorstd::copy(id.rbegin(),id.rend(),outite);std::cout << '\n';
}

應用于仿函數

  • ?配節操作:系結(bind)、否定 、組合、對一般成員或者成員函數的修飾

?

  • 注意事項:期望獲得配接能力的組件,本身必須是可以配接的,即一元仿函數需要繼承unary_function、二元仿函數需要繼承binary_function、成員函數必須以mem_fun處理過、一般函數需要以ptr_fun處理過
  • 一個未經ptr_fun處理過的一般函數,雖然可以使用,但是沒有任何的配接的 能力

?容器適配器

  • stack
  • stack封裝了所有deque的對外接口,只有符合規則的函數才會被開放,因此stack是作用于容器上的配接器

  • queue

?Iterator adapters

insert iterators

  • 內部維護一個容器,容器有自己的迭代器,因此客戶端對insert iterators賦值操作,在insert iterators中轉換成對這個容器的迭代器進行插入操作

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

請使用手機"掃一掃"x

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

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

相關文章

python中random庫_python標準庫之random模塊

Python中的random模塊用于生成隨機數。 下面具體介紹random模塊的功能&#xff1a; 1.random.random() #用于生成一個0到1的 隨機浮點數&#xff1a;0< n < 1.0 1 import random 2 a random.random() 3 print (a)2.random.uniform(a,b) #用于生成一個指定范圍內的隨機符…

java 可變個數形參

概念 案例 package lesson.l10_oop;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/1 14:53* function 可變個數形參*/ public class ChangeableFormalParameter {public static void main(String[] args) {ChangeableFormalParameter parameter new Ch…

C++標準庫 第七章 STL迭代器

迭代器 能力&#xff1a;行進和存取的能力Input迭代器 一次一個向前讀取元素&#xff0c;按此順序一個一個返回元素例子&#xff1a;從標準輸入裝置(鍵盤) 讀取數據&#xff0c;同一個數據不會被讀取兩次&#xff0c;流水一樣&#xff0c;指向的是邏輯位置使用前置式遞增運算…

nacos集群的ap cp切換_阿里Nacos-配置-多環境

多環境的配置隔離是配置中心最基礎的一個功能之一。不同的環境配置的值不一樣&#xff0c;比如數據庫的信息&#xff0c;業務的配置等。Spring Boot 多環境配置首先我們來回顧下在Spring Boot中用配置文件的方式怎么進行環境的隔離。默認我們都會創建一個application.propertie…

java 值傳遞機制

說明 案例1 案例2 案例3 案例4 案例5 案例6 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:24* function 將對象作為參數傳遞給方法*/ public class Circle {double radius;public double findArea() {return Math.PI * Ma…

密碼學專題 非對稱加密算法指令概述 RSA

非對稱加密算法也稱為公開密鑰算法&#xff0c;其解決了對稱加密算法密鑰需要預分配的難題&#xff0c;使得現代密碼學的研究和應用取得了重大發展。非對稱加密算法的基本特點如下: 加密密鑰和解密密鑰不相同;密鑰對中的一個密鑰可以公開(稱為公開密鑰);根據公開密鑰很難推算出…

python元胞自動機模擬交通_結構專欄 | 解析DEFORM軟件中的元胞自動機法

點擊上方藍色字體&#xff0c;關注我們導語金屬材料的性能取決于內部的微觀組織結構&#xff0c;而好的材料性能和價格是產品最大的優勢。隨著現代物理冶金、熱成形技術、熱處理技術和計算機技術的興起與發展&#xff0c;使預測和控制金屬材料熱加工過程中的組織演變成為可能。…

java 遞歸

概念 代碼 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/2 21:42* function 遞歸&#xff1a;求n個數的和、乘積*/ public class Recursion {public static void main(String[] args) {Recursion recursion new Recursion();S…

密碼學專題 非對稱加密算法指令概述 DH算法指令

DH概述 用于密鑰交換的公開算法&#xff0c;廣泛應用于各種安全協議SSL協議同樣支持DH算法DH算法使用之前需要預先共享兩個參數&#xff0c;本原元g和模n&#xff0c;這兩個參數影響到算法的安全性&#xff0c;因此需要預先生成并檢測其安全性生成這些必要參數和管理這些參數的…

java 封裝和隱藏 權限修飾符

概念 問題的引入 封裝性的體現 權限修飾符 案例 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;public void setAge(int age) { /* if (age<0||age>…

if __name__ == __main___python中 __name__ == #x27;__main__#x27; 有什么作用?

python中if __name__ ‘__main__’ 的作用&#xff0c;到底干嘛的&#xff1f;有句話經典的概括了這段代碼的意義&#xff1a;“Make a script both importable and executable”就是讓你寫的腳本模塊既可以導入到別的模塊中用&#xff0c;另外該模塊自己也可執行。這句話&…

密碼學專題 非對稱加密算法指令概述 DSA算法指令

DSA算法和DSA指令概述 DSA算法是美國國家標準的數字簽名算法&#xff0c;只具備數字簽名的功能不具備密鑰交換的功能生成DSA參數然后生成DSA密鑰&#xff0c;DSA參數決定了DSA密鑰的長度三個指令首先是dsaparam指令&#xff0c;該指令主要用來生成DSA密鑰參數&#xff0c;并提…

每天定時打開某個網頁_Python科普帖定時通知

0 復習上一關我們學習了selenium&#xff0c;它有可視模式與靜默模式這兩種瀏覽器的設置方法&#xff0c;二者各有優勢。然后學習了使用.get(URL)獲取數據&#xff0c;以及解析與提取數據的方法。在這個過程中&#xff0c;我們操作對象的轉換過程&#xff1a;除了上面的方法&am…

java 構造器

概念 案例1 package lesson.l11_oop2;/*** Illustration** author DengQing* version 1.0* datetime 2022/7/3 15:28* function*/ public class Person {private int age;private String name;public Person() {this.age 18;}public Person(int age, String name) {this.age …

密碼學專題 信息摘要和數字簽名指令

信息摘要 區別于對稱加密和非對稱加密&#xff0c;信息摘要算數是一種不可逆的操作&#xff0c;無論輸入數據的大小輸出的數據長度是固定的信息摘要算數對輸入很敏感&#xff0c;即使數據變化很細微&#xff0c;輸出的結果會出現很大的差異從不同輸入得到相同的輸出的概率非常…

dataframe 篩選_Spark.DataFrame與Spark.ML簡介

本文是PySpark銷量預測系列第一篇&#xff0c;后面會陸續通過實戰案例詳細介紹PySpark銷量預測流程&#xff0c;包含特征工程、特征篩選、超參搜索、預測算法。在零售銷量預測領域&#xff0c;銷售小票數據動輒上千萬條&#xff0c;這個量級在單機版上進行數據分析/挖掘是非常困…

密碼學專題 證書和CA指令 證書和CA功能概述

為什么需要證書 實現了公鑰和私鑰的相互驗證&#xff0c;但是任何人都可以生成很多的密鑰對&#xff0c;密鑰對并沒有關聯實體身份&#xff0c;因此誕生可數字證書前提是CA是所有用戶都信任的用戶需要將自己的信息和公鑰交給CA進行認證生成一個屬于自己并被其與用戶認可的數字…

python怎么接外活_java和Python兩門語言,哪個適合接活單干?

謝邀。 根據知乎規矩&#xff1a;不說需求就挑語言的行為就是耍流氓。 如果接的活傾向于OA系統、管理系統之類的&#xff0c;建議是java&#xff0c;畢竟框架模板都很成熟&#xff0c;也比較好找&#xff0c;快速開發什么的在晚上搜一下&#xff0c;改改樣式就可以了。這些項目…

密碼學專題 證書和CA指令 申請證書|建立CA|CA操作|使用證書|驗證證書

Req指令介紹 功能概述和指令格式 req指令一般來說應該是提供給證書申請用戶的工具&#xff0c;用來生成證書請求以便交給CA驗證和簽發證書。但是&#xff0c;OpenSSL的req指令的功能遠比這樣的要求強大得多&#xff0c;它不僅可以生成RSA密鑰、DSA密鑰&#xff0c;以及將它們…