模板學習筆記

2021-08-30 05:42:01 字數 2687 閱讀 7502

模板(templates)

模板,顧名思義,就是預先做好的樣板,利用該樣板可以製造出樣式相近的產品,但是產品可能所用材料不同,卻具有相同的功能操作,比如,要想鑄造鋁鍋,首先要有個模子,其後就是材料的製取了。然而通過這個模子也可以造個金鍋出來。

c++中的模板與上大同小異,都是基於世界上萬事萬物都具有相似性這一事實,只不過模板前面加上了「c++的」,即c++程式設計世界的模板問題。

程式設計就是一項有趣的對現實世界的建模活動,所以,在使用物件導向語言對現實系統進行抽象描述時,肯定會或多或少地存在相似甚至相同**的情況,但內在還是有區別的:各類事物(對應於程式設計中一定型別的物件)的內部,其屬性和操作的內涵各不相同,故擺在程式設計人員面前的乙個永恆的問題《通常的程式設計行為》就是:如何描述和處理不同事物(特別是沒有繼承關係的事物),使其共享相似或相近**?即通用性程式設計問題,或稱之為泛型程式設計問題《如果**能夠對處理各種事物通用,那麼其程式設計就是generic programming,亦稱為通用性程式設計。>.

c++程式設計問題

c++程式設計簡單地說就是一些型別和函式,甚至可以說,《以前的認識:從結構上或者從本質上說,程式設計就是設計函式!!!由此想到:乙個長期存在問題的現在的認識記錄:在進行程式設計時,會涉及乙個到底是先設計演算法,還是先設計資料結構的問題。以前往往把演算法封做神靈,將資料結構放置不管不聞,所以就簡單地認為是演算法需要優先設計。實際上,當時的暗含的潛在預設是已經有了資料結構,本質上裡面涉及了人們往往在進行開發的前期,捨不得把時間放到資料結構的設計上,從而其後設計的基於資料結構的演算法很是低效,並且導致整個系統索然無味。隨著歲月的流逝,慢慢知道,資料結構的設計不僅僅關係到演算法的設計,還關係到系統的可擴充套件性,以及後期的維護。有了良好的資料結構,演算法也會水到渠成。>程式設計就是設計型別和函式,然後將其按照c++的程式結構組織起來。

注:這只是一點兒體會,實際上,設計出高質量的系統是來之不易的!不是空口就來的!!!

c++模板程式設計

模板程式設計:由於事物的相似性,設計出的型別和函式有時也表現出相似甚至相同性,將這些具有相似的型別和函式歸納起來構成乙個類族或函式族,並採用一種統一的方式來進行程式設計的方式。

把型別看成是一類事物,則以型別為引數的模板程式設計便可以看作是適應於各類事物的通用程式設計了。而從技術上,模板程式設計涉及型別引數,因此,模板程式設計可以看作是廣泛適用於各型別的程式設計,即泛型程式設計。這猶如引用,在技術上,含有指標的意義,但在概念上看,則應稱之為別名。

模板程式設計就是泛型程式設計,這正如虛函式程式設計就是物件導向程式設計。於是,只要在程式中用到了模板宣告和定義,就屬於泛型程式設計。然而從廣義上說,泛型程式設計更講求目的:模板設計的目的是為了能得到多種型別的有效通用。

通用程式設計

通用程式設計是概念級的程式設計,它高度抽象一組概念,描述通用和高效的演算法或資料結構,即讓一組相關領域的概念,普遍適用於通用程式設計,已達到高度抽象的目的。

c++ stl的重要性

stl是乙個獨特的、以模板為基礎堆積起來的型別框架,它提供了許多通用的操作《標準演算法》,而這些操作是作用在資料結構《容器》之上的,而且所有的這些操作和資料結構都是採用模板設計實現的。

stl的設計者在每個容器類中都做了乙個遍歷器(類),將逐個羅列容器中元素的操作標準化,以使演算法可以脫穎而出而通用化。

遍歷器的通用性導致了演算法的通用性,演算法的通用之後,便成為各個容器共同擁有的財產,資料結構的操作集合從本身的成員函式一下子擴充套件到所有通用的演算法,而且付出的效能代價是最小的。

注:遍歷器的操作是通用的,然而,遍歷器的操作的內在處理是不同的,因為資料結構的不同決定了元素訪問策略的不同。從而也就決定了各個不同的資料結構具有不同的遍歷器,這些遍歷器都繼承自乙個抽象的iterator類,在該類中含有遍歷器的標準操作。並且遍歷器的標準操作的返回值也是標準的,可以作為演算法的引數,故遍歷器的通用性導致了演算法的通用性。

模板分類

模板分為類模板和函式模板,函式模板的型別引數強調資料實參演繹,而類模板沒有資料實參,只有型別實參。

類模板:以所處理的資料型別的說明所為引數的類的描述。

函式模板:以所處理的資料型別的說明作為引數的函式的描述。

乙個模板並非是乙個實實在在的類或函式,僅僅是乙個類或函式的描述。

模板的根本:可以實現邏輯相同,資料型別不同的程式**的複製,即所處理的資料型別可能不同,但處理資料卻具有相同的表現形態《亦行為表現,或操作行為》;

模板意義:減輕程式設計和維護的工作量和難度。

兩者所例項化的結果都會受其模板定義的約束,如其初值設定。

模板表現了一種完全不同的**重用方法:模板對源**進行重用,而不是通過繼承和組合重用物件**。當使用者使用模板時,引數由編譯器來替換,這非常像原來的巨集方法,卻更加清晰,更容易使用。

模板編譯時行為

模板使類和函式可在編譯時定義所需處理和返回的資料型別。

附: 對於型別來說,從型別能夠建立出任意個物件,物件視其建立時初值(實參值)的不同而不同。同樣對於模板來說,從類模板能夠產生出任意個型別定義,型別視其建立時的初值(型別實參值)的不同而不同。也可以從函式模板派生出任意的函式定義體,函式也視其建立時初值(實參值能夠推演到的型別:資料實參型別《如int>-->匹配資料形參型別-->確認模板實參-->推得模板形參(該過程稱之為資料實參的演繹))的不同而不同。

類模板的乙個好處是發展通用資料結構,因此,有一種觀點認為泛型程式設計只是模板程式設計的一種。

模板學習筆記

1 模板語法 template這個關鍵字會告訴編譯器,隨後的類定義將操作乙個或更多未指明的型別。當由這個模板產生實際類 時,必須指定這些型別以使編譯器能夠替代他們。template class arrary t a size void display tmplate 這裡的t是乙個型別名稱,這個型別...

模板模式(學習筆記)

模板模式 模板模式看起來很簡單,看起來。先看一下uml圖吧 這不就是乙個繼承麼?子類完成超類的抽象方法?重要的是templetemethod 可以看到,它規定的operation1與operation2的執行順序。定義 定義乙個操作中的演算法 也就是上圖中的templetemethod方法 的骨架,...

Django學習筆記 模板

簡單點來說,無外乎就是從前端得到資料,資料在後端處理,將資料返回給前端。這裡就不說如何獲取前端資料了。之前的demo中有一種 return httpresponse u 接收這個請求後,返回的資料 但是這種基本是用不到了,正常的做法是url中的name屬性和view中render。當然也可能使用js...