關於泛型程式設計和c 標準模板庫

2021-07-25 07:03:04 字數 1454 閱讀 9949

1. 泛型程式設計

所謂泛型程式,就是不依賴與某種特定的資料結構的程式。 前面所學的模板,就是泛型程式設計中極其有用的工具。設計的主要思想就是將演算法從特定的資料結構裡抽象出來。

概念(concept ) - 泛型程式設計中 作為引數的資料型別所具有的功能

模型(model) - 具備乙個概念需要的基本資料結構。

如果將概念視為集合來理解子概念,我覺得更容易。 如果b

2. stl

stl - standard template library , c++標準庫之一,提供一些常用的演算法和資料結構。 (與c相比,這樣的開發和復用效率更高,而且因為是標準庫,有著相同的介面,也利於使用和閱讀**)

stl有4種元件: 容器(container)、迭代器(iterator)、函式物件(function object)、演算法(algorithm)。

在stl裡,我們用容器來裝東西(資料內容),用迭代器來訪問他們,將他們傳送到使用到的演算法裡,而演算法的呼叫在函式物件裡完成的。

(1)迭代器

怎們說呢,這個迭代器有點像cpu裡的資料通路,在stl裡,資料的交流全靠迭代器來完成。當然,迭代器也有些像乙個泛型的指標,指標是迭代器,當迭代器不僅僅是指標(在stl裡,可以直接對輸入輸出流操作,這些的實現應該不能簡單的用指標來完成)。

輸入流、輸出流迭代器:從乙個輸入流、輸出流連續的輸入輸出某種型別的資料

completeiostream_iterator(t); t有兩個條件:有預設建構函式和過載「>>」(輸入);

completeostream_iterator(t);t有乙個條件:過載"<<」

開始的疑問:用這個迭代器有什麼好處,比如現在有一堆資料輸入,最初的做法是開個迴圈讀,但是迭代器重載了++,*,-,->。你只要迭代器++就可以不停的讀

迭代器的分類:輸入輸出迭代器(這是第一代)-> 前向迭代器 -> 雙向迭代器 -> 隨機訪問迭代器(-> 前者是後者的子概念)

所有迭代器(p)具有的功能:

p++:後置指向迭代器所指的後乙個元素,返回型別不確定(??)

迭代器的輔助函式 - advance和distance

這兩個函式為所有迭代器提供只有隨機訪問迭代器才有的訪問能力:前進或回退多個元素,以及計算距離;

(2) 容器

基本功能: 預設構造s 、s1 op s2(op可以是+,-,> ,< ,= ,>= ,<= , == ,!=)、s.begin()  、 s.end() 、 s.clear() 、s.empty() 、 s.size() 、 s.swap(s1)

容器有兩種概念劃分:順序容器和關聯容器、容器《可逆容器《隨機訪問容器

對後者:stl對每個可逆容器提供了逆向迭代器s.rbegin() - 指向最後元素的逆向迭代器 s.rend() - 指向第乙個元素前乙個位置的逆向迭代器

向量       佇列       鍊錶   集合    多重集合  對映      多重對映

具體到每個容器的使用,學會檢視手冊;

C 泛型程式設計 模板

在學習c c 過程中,我們可能常用幾種函式,由於傳入的引數不同,需要進行不同的函式的編寫,在c語言中需要根據引數和功能的不同重新編寫新的函式,而在c 中有函式過載這樣的機制,一定程度上解決了問題,但是 過載的函式僅僅只是型別不同,的復用率比較低,只要有新型別出現時,就需要增加對應的函式 的可維護性比...

C 泛型程式設計(模板)

2.類模板 我們先來看乙個概念 泛型程式設計 使用模板,編寫和型別無關的 沒有模板之前,一些函式或者類,針對不同的型別需要寫很多重複的 函式 比如交換函式swap,假如傳入的資料型別不同,int,char,double。我們要實現不同的型別物件函式。類 比如我們像實現乙個資料結構棧stack,sta...

C 泛型程式設計 模板

0.所謂泛型程式設計就是獨立於任何特定型別的方式編寫 使用泛型程式時,需要提供具體程式例項所操作的型別或者值。我們經常用到stl容器 迭代器 和演算法都是泛型程式設計的例子 模板是c 支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數 返...