一、什麼是類模板
在C++中,類模板是一種通用的類定義,可以將類型參數化,使得該類可以適用於多種數據類型。類模板中的成員函數和成員變數是沒有具體實現的,只有在使用時才被實例化。使用類模板的主要優點是可以減少代碼冗餘,提高代碼復用性,降低維護成本。
template
class Stack {
private:
T* _data;
int _top;
int _size;
public:
Stack(int size = 100) : _data(new T[size]), _top(-1), _size(size) {}
~Stack() { delete[] _data; }
void push(T val);
T pop();
bool isEmpty() const { return _top == -1; }
bool isFull() const { return _top == _size - 1; }
};
template
void Stack::push(T val) {
if (isFull()) {
throw std::overflow_error("Stack is full.");
}
_data[++_top] = val;
}
template
T Stack::pop() {
if (isEmpty()) {
throw std::underflow_error("Stack is empty.");
}
return _data[_top--];
}
二、類模板的使用
使用類模板需要指定具體的類型,可以採用顯式實例化或隱式實例化兩種方式。
顯式實例化是在代碼中指定類型參數,編譯器會將模板代碼實例化成具體類型的代碼,生成可執行文件。
void testStack() {
Stack intStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
cout << intStack.pop() << endl;
cout << intStack.pop() << endl;
cout << intStack.pop() << endl;
}
void testStack2() {
Stack strStack;
strStack.push("hello");
strStack.push("world");
cout << strStack.pop() << endl;
cout << strStack.pop() << endl;
}
int main() {
testStack();
testStack2();
return 0;
}
隱式實例化是在代碼中不指定類型參數,編譯器會根據函數參數推導出類型,自動實例化成具體類型的代碼。
template
void printSize(Stack s) { // 隱式實例化
cout << "stack size = " << sizeof(s) << endl;
}
int main() {
Stack s;
printSize(s);
return 0;
}
三、通用數據結構的實現——棧
使用類模板可以輕鬆定義通用數據結構,例如棧、隊列、鏈表等。
棧(Stack)是一種後進先出(LIFO)的數據結構,支持插入、彈出操作。棧可以使用數組或鏈表實現。下面是一個使用類模板實現的棧:
template
class Stack {
private:
T* _data;
int _top;
int _size;
public:
Stack(int size = 100) : _data(new T[size]), _top(-1), _size(size) {}
~Stack() { delete[] _data; }
void push(T val);
T pop();
bool isEmpty() const { return _top == -1; }
bool isFull() const { return _top == _size - 1; }
};
template
void Stack::push(T val) {
if (isFull()) {
throw std::overflow_error("Stack is full.");
}
_data[++_top] = val;
}
template
T Stack::pop() {
if (isEmpty()) {
throw std::underflow_error("Stack is empty.");
}
return _data[_top--];
}
int main() {
Stack s; // 創建一個整型棧
s.push(1);
s.push(2);
s.push(3);
while (!s.isEmpty()) {
cout << s.pop() << endl;
}
return 0;
}
四、總結
類模板是C++中定義通用數據結構的重要手段,能夠實現類型參數化,代碼復用性高。使用類模板定義的數據結構可以適用於不同的數據類型,且代碼簡潔,易於維護。
在實際編程中,使用類模板可以大大提高代碼復用性和編程效率,是C++程序員必須掌握的技能之一。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280852.html
微信掃一掃
支付寶掃一掃