C++中函數(shù)模板與類模板的簡單使用及區(qū)別介紹
在C++中,模板是實現(xiàn)泛型編程的核心機制,允許開發(fā)者編寫與類型無關的代碼。以下是函數(shù)模板和類模板的詳細介紹及實際示例。
一、函數(shù)模板
定義
函數(shù)模板通過參數(shù)化類型實現(xiàn)泛型操作,只需編寫一次代碼即可處理多種數(shù)據(jù)類型,避免重復。
語法
template<typename T>
返回類型 函數(shù)名(參數(shù)列表) { ... }typename T 表示類型占位符,編譯時根據(jù)實參類型自動實例化。
真實示例
交換兩個值(swap)
template<typename T>
void swap(T &a, T &b) {
T temp = a;
a = b;
b = temp;
}使用場景:交換任意類型的變量(如 int、string)。
int x = 1, y = 2; swap(x, y); // 自動推導為 swap<int>
求最大值(max)
template<typename T>
T max(const T &a, const T &b) {
return (a > b) ? a : b;
}使用場景:比較同類型值的最大值,要求類型支持 operator>。
打印數(shù)組
int nums[] = {1, 2, 3};
printArray(nums); // 推導 T=int, N=3二、類模板
定義
類模板允許創(chuàng)建可處理多種數(shù)據(jù)類型的類,成員變量和函數(shù)均可使用模板參數(shù)。
語法
template<typename T>
class 類名 {
// 類成員使用 T 作為類型
};真實示例
動態(tài)數(shù)組(Array)
template<typename T>
class Array {
private:
T* data;
size_t size;
public:
Array(size_t size) : size(size), data(new T[size]) {}
~Array() { delete[] data; }
T& operator[](size_t index) { return data[index]; }
size_t getSize() const { return size; }
};使用場景:存儲任意類型的動態(tài)數(shù)組。
Array<int> intArr(10); // 存儲 int 的數(shù)組 Array<string> strArr(5); // 存儲 string 的數(shù)組
鍵值對(Pair)
template<typename T1, typename T2>
class Pair {
public:
T1 first;
T2 second;
Pair(const T1 &f, const T2 &s) : first(f), second(s) {}
};使用場景:組合兩個不同類型的數(shù)據(jù)(如字典條目)。
Pair<string, int> student("Alice", 90); // 姓名和分數(shù)棧(Stack)
template<typename T>
class Stack {
private:
std::vector<T> elements;
public:
void push(const T &elem) { elements.push_back(elem); }
T pop() {
if (elements.empty()) throw std::out_of_range("Stack is empty!");
T elem = elements.back();
elements.pop_back();
return elem;
}
};使用場景:實現(xiàn)泛型棧結構,支持多種數(shù)據(jù)類型。
Stack<double> doubleStack; doubleStack.push(3.14);
三、關鍵區(qū)別
| 特性 | 函數(shù)模板 | 類模板 |
|---|---|---|
| 類型推導 | 自動推導參數(shù)類型(無需顯式指定) | 必須顯式指定類型(如 Stack<int>) |
| 默認模板參數(shù) | 支持(C++11起) | 支持(如 template<typename T = int>) |
| 典型應用 | 算法(如排序、交換) | 容器(如數(shù)組、棧、隊列) |
四、注意事項
- 編譯方式:模板代碼通常放在頭文件中,因為編譯器需在編譯時生成具體類型的實例化代碼。
- 類型約束:模板中的操作(如
operator>)需在類型T中定義,否則編譯失敗。 - 性能:模板在編譯時展開,無運行時開銷,但可能增加代碼體積。
通過合理使用模板,可以大幅提升代碼復用性,同時保持類型安全和高性能。例如,標準模板庫(STL)中的 vector、sort 均基于模板實現(xiàn)。
到此這篇關于C++中函數(shù)模板與類模板的簡單使用的文章就介紹到這了,更多相關C++函數(shù)模板與類模板內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)Matlab的zp2tf函數(shù)的示例代碼
matlab?的?zp2tf?函數(shù)的作用是將極點形式的?H(s)?函數(shù)的分母展開,本文主要為大家介紹了C++實現(xiàn)Matlab的zp2tf函數(shù)示例代碼,需要的可以參考一下2023-04-04
OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級簡單)
這篇文章主要介紹了OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級簡單),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
基于Matlab實現(xiàn)離散系統(tǒng)分岔圖的繪制
這篇文章主要介紹了如何利用Matlab實現(xiàn)離散分岔圖的繪制,文中的示例代碼講解詳細,對我們學習Matlab有一定的幫助,需要的可以參考一下2022-04-04
Visual C++ 6.0實現(xiàn)域名解析為IP的示例代碼
本文主要介紹了在Windows環(huán)境下,使用Visual C++ 6.0(VC6)編譯器,通過Winsock庫調用DNS服務完成域名到IP地址的轉換,具有一定的參考價值,感興趣的可以了解一下2025-03-03

