1. 程式人生 > 其它 >C#中HashSet<T>、SortedSet<T>和Hashtable的使用以及所有集合型別的概述

C#中HashSet<T>、SortedSet<T>和Hashtable的使用以及所有集合型別的概述

1 模板

1.1 模板的概念

模板就是建立通用的模具,大大提高複用性

模板的特點:

  • 模板不可以直接使用,它只是一個框架
  • 模板的通用並不是萬能的

1.2 函式模板

  • C++另一種程式設計思想稱為 ==泛型程式設計== ,主要利用的技術就是模板

  • C++提供兩種模板機制:函式模板類模板

1.2.1 函式模板語法

函式模板作用:

建立一個通用函式,其函式返回值型別和形參型別可以不具體制定,用一個虛擬的型別來代表。

語法:

template<typename T>
函式宣告或定義

解釋:

template --- 宣告建立模板

typename --- 表面其後面的符號是一種資料型別,可以用class代替

T --- 通用的資料型別,名稱可以替換,通常為大寫字母

示例:

 

//交換整型函式
void swapInt(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

//交換浮點型函式
void swapDouble(double& a, double& b) {
    double temp = a;
    a = b;
    b = temp;
}

//利用模板提供通用的交換函式,告訴編譯器緊跟著的程式碼中的T不要報錯
template<typename T>
void mySwap(T& a, T& b)
{
    T temp 
= a; a = b; b = temp; } void test01() { int a = 10; int b = 20; //swapInt(a, b); //利用模板實現交換 //1、自動型別推導 mySwap(a, b); //2、顯示指定型別 mySwap<int>(a, b); cout << "a = " << a << endl; cout << "b = " << b << endl; } int main() { test01(); system(
"pause"); return 0; }

總結:

  • 函式模板利用關鍵字 template
  • 使用函式模板有兩種方式:自動型別推導、顯示指定型別
  • 模板的目的是為了提高複用性,將型別引數化

1.2.2 函式模板注意事項

注意事項:

  • 自動型別推導,必須推匯出一致的資料型別T,才可以使用

  • 模板必須要確定出T的資料型別,才可以使用

 

//利用模板提供通用的交換函式
template<class T>
void mySwap(T& a, T& b)
{
    T temp = a;
    a = b;
    b = temp;
}


// 1、自動型別推導,必須推匯出一致的資料型別T,才可以使用
void test01()
{
    int a = 10;
    int b = 20;
    char c = 'c';

    mySwap(a, b); // 正確,可以推匯出一致的T
    //mySwap(a, c); // 錯誤,推導不出一致的T型別
}


// 2、模板必須要確定出T的資料型別,才可以使用
template<class T>
//func函式緊跟著模板,所以它是一個模板函式
void func()
{
    cout << "func 呼叫" << endl;
}

void test02()
{
    //func(); //錯誤,模板不能獨立使用,必須確定出T的型別, 
    func<int>(); //利用顯示指定型別的方式,給T一個型別,才可以使用該模板,模板函式func又沒有用T的地方,所以可以這樣呼叫
}

int main() {

    test01();
    test02();

    system("pause");

    return 0;
}

總結:

  • 使用模板時必須確定出通用資料型別T,並且能夠推匯出一致的型別