函式模板的定義與使用
函式家族、語法形式、型別引數、typename、例項化、二次編譯、包含模型。
函式模板包含兩種引數,一種是模板引數,即在模板名之前,用一對尖括號括起來的引數;
另一種是呼叫引數,在模板名之前,用一對圓括號括起來的引數
如果函式模板呼叫引數的型別相關於該模板時,即使不顯式指定模板引數,編譯器也有能力根據引數的型別隱式推斷出正確的模板引數,來獲得與普通函式呼叫相同的語法表達。
#include
#include
#include
using namespace std;
template
void fun1(t cinst& x, t const& y)
template
void fun2(t x,t y)
template
r fun3(t const& t)
int main()
g++ 編譯鏈結
a.out執行輸出
void fun1(t cinst& x, t const& y) 常引用有什麼好處呢?如果實際傳遞的函式實參是個複雜物件,那麼就可以避免物件之間的拷貝,即減少了函式呼叫的開銷,又避免了深淺拷貝帶來的麻煩。
模板與類:
從類模板到實際上經歷了兩個例項化過程:
編譯期:編譯器將類模板例項化為類並生成物件建立指令
執行期:處理器執行物件建立指令將類例項化為記憶體物件。
類模板本身不代表乙個型別,只有通過模板實參將其實例化為具體類以後,才具備通常所說的型別語義,可被用於物件的宣告和定義
類模板名《型別實參1,型別實參2,…>
ex:stacksi;
stack* ps=&si;
stack& rs=si;
在類模板的定義中,一般採用 類模板名《模板引數》的形式,但多數編譯器也允許將其簡化為「類模板名」
template
class stack
stack&operator= (stackconst& rhs)
};使用typeid(變數或型別).name()來獲取常量或變數的型別
該標頭檔案包含執行時型別識別(在執行時確定資料型別)的類
typeid的使用
typeid操作符 typeid表示式形如: typeid(expr);
這裡expr是任意表示式或者型別名。如果表示式的型別是類型別且至少包含有乙個虛函式,則typeid操作符返回表示式的動態型別,需要在執行時計算;否則,typeid操作符返回表示式的靜態型別,在編譯時就可以計算。
typeid操作符的返回結果是名為type_info的標準庫型別的物件的引用(在標頭檔案typeinfo中定義),因此使用typeid操作符時要包含標頭檔案typeinfo的預處理命令「#include 」。標準並沒有確切定義type_info,它的確切定義編譯器相關的,但是標準卻規定了其實現必需提供如下四種操作:
t1 == t2
如果兩個物件t1和t2型別相同,則返回true;否則返回false
t1 != t2
如果兩個物件t1和t2型別不同,則返回true;否則返回false
t.name()
返回型別的c-style字串,型別名字用系統相關的方法產生
t1.before(t2)
返回指出t1是否出現在t2之前的bool值
type_info類提供了public虛析構函式,以使使用者能夠用其作為基類。它的預設建構函式和拷貝建構函式及賦值操作符都定義為private,所以不能定義或複製type_info型別的物件。程式中建立type_info物件的唯一方法是使用typeid操作符(由此可見,如果把typeid看作函式的話,其應該是type_info的友元)。type_info的name成員函式返回c-style的字串,用來表示相應的型別名,但務必注意這個返回的型別名與程式中使用的相應型別名並不一定一致(往往如此,見後面的程式),這是由實現所決定的,標準只要求實現為每個型別返回唯一的字串。
常用的形式:typeid(常量或變數或表示式).name()
//獲取該常量或變數或表示式的資料型別名對應的字串
例如 int a; float b;
cout
使用例項
[cpp]view plain
copy
//使用
typeid(
變數或型別
).name()
來獲取常量或變數的型別
#include //
使用型別獲取函式必須包含此標頭檔案
#include
usingnamespacestd;
intmain()
執行結果
c++並沒有規定各種資料型別在記憶體中的儲存大小,依賴於不同的編譯器的不同而不同,要想獲知當前編譯器對各種資料型別分配的大小,可以通過sizeof運算子來獲取。
使用方法1:
sizeof(資料型別)
使用方法2:
sizeof(變數名或常量名或表示式)
sizeof(int)
或
int a;
sizeof(a)
//資料型別空間分配情況
#include
usingnamespacestd;
intmain()
STL 標準模板庫)
此篇只是乙個目錄,將分成單篇去完成 stl 主要有三個部分組成 容器,迭代器,演算法。順序容器 向量 vector 雙端佇列 dequeue 表 list ps copy 方法 關聯容器 集合 set 多重集合 multiset 對映 map 多重對映 multimap 容器介面卡 棧 stack ...
Stl(標準模板庫)
stl 標準模板庫 stl的目的是標準化元件,這樣就不用重新開發,可以使用現成的元件。我們常用到的stl容器有vector list deque map multimap set和multiset。1.簡單概括 如果需要高效的隨機訪問,不在乎插入和刪除的效率,使用vector 類似陣列 2 如果需要...
STL標準模板庫
stl標準模板庫 一。概述 c 內建的標準模板庫stl可以分為以下6大類 1.容器 2.迭代器 3.空間分配器 4.介面卡 5.演算法 6.仿函式 1.容器 概念 用來管理一組元素 分類 序列式容器 sequence containers 每個元素都有固定位置 取決於插入時機和地點,和元素值無關。v...