日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++笔记------模版

發布時間:2023/11/29 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++笔记------模版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模版-----是為了讓代碼更加通用,使代碼不受數據類型的影響。減少代碼冗余。模版將數據類型當作一個參數進行傳遞。包括函數模版和類模板。

函數模版:

//定義一個比較大小的函數模版 template<typename Type> // 也可以寫成 template <class Type> Type Max(Type a,Type b) {return a > b ? a : b; } int main() {cout << Max(1,2) << endl;cout << Max('A', 'a') << endl;cout << Max(2.5,3.2) << endl;return 0; }

  模版會根據傳遞的實參自動進行數據類型的推演,比如在Max(2.5,2.3)中,模版會根據2.5是double,2.3是double,模版會推導出Type是double類型,生成一個模版函數,使用double類型的比較函數。所以模版雖然方便,但是效率不高。

  比如,調用函數Max(1,2)時,編譯器會先根據函數模版生成一個int類型的模版函數,然后在調用這個函數。

//模版函數
int
Max(int a, int b) {return a > b ? a : b }

  當出現實參類型不一致時,普通函數正常運行,模版會出現錯誤,如:

/*
template<typename Type> //會產生二義性 Type Max(Type a,Type b) {return a > b ? a : b; }
*/ int Max(int a,int b) //會自動進行隱式轉換 {return a > b ? a : b; } int main() {cout << Max(1,2.3) << endl;
cout << Max(1,(int)2.3) << endl; //將2.3強制轉換成int類型
cout << Max<int>(1,2.3) << endl; //指定調用int類型的模版函數 }

  也可以重新編寫模版函數,如:

template<typename Type1, typename Type2> Type2 Max(Type1 a,Type2 b) {return a > b ? a : b; }

如果是類對象進行比較,需要重載比較運算符。模版只負責比較,不管如何進行比較。

class Test {int num; public:Test(int b):num(b){}bool operator>(const Test & t){if (this->num > t.num)return true;else return false;} }; template<typename Type1> Type1 Max(Type1 a,Type1 b) {return a > b ? a : b; } int main() {Test t1(10);Test t2(9);Max(t1,t2); //不能使用cout輸出,因為沒有提供<<運算符函數 }

類模板: 

  利用類模板簡單實現線性鏈表。

  ?int a = int(); //將a初始化為0;
  模版類成員函數都是模版函數,不允許將類定義和實現分離

#include <iostream> using namespace std; //聲明List類 template<typename Type> class List;
template
<typename Type> class ListNode { private:Type data;ListNode<Type> *next; public:friend class List<Type>; //將List類成為ListNode類的友元類,才能訪問私有數據ListNode():data(Type()),next(NULL){} //零初始化:根據不同類型進行初始化。如,int a = int() //a被初始化為0。ListNode(Type d,ListNode<Type> *n = NULL):data(d),next(n){}~ListNode(){} };template<typename Type> class List { private:ListNode<Type> *first;ListNode<Type> *last;size_t size; public:List();~List();bool push_back(Type x); //尾部插入鏈表
//顯示列表函數
void Show_list() const //模版類的成員函數可以在類內部定義{ListNode<Type> *p=first;while(p != NULL){cout << p->data;p = p->next;}} }; template<typename Type> //模版類的成員函數都是模版函數,所以必須寫template<typename Type> List<Type>::List() //限定是List<Type>:: {first = last = new ListNode<Type>;last->next = NULL;size=0; } template<typename Type> List<Type>::~List() {ListNode<Type> *p=first;while(p != NULL){first = p->next;delete p; //在構造函數中使用new,則在析構函數中使用deletesize--;p=first;} } template<typename Type> bool List<Type>::push_back(Type x) {ListNode<Type> *s = new ListNode<Type>;if( s == NULL )return false;s->data = x;s->next = NULL;last->next = s;last = s;return true; } int main() {List<int> mylist;for(int i=1;i<10;i++){mylist.push_back(i);}mylist.Show_list();return 0; }

轉載于:https://www.cnblogs.com/zhangzeze/p/8717968.html

總結

以上是生活随笔為你收集整理的C++笔记------模版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。