模板类与函数
发布人:shili8
发布时间:2024-11-15 11:04
阅读次数:0
**模板类与函数**
在C++中,模板(Template)是指可以根据类型参数自动生成代码的机制。模板类(Class Template)和函数(Function Template)是C++编程中的重要概念,它们使得我们能够写出通用的、类型安全的代码。
### 模板类模板类是一种特殊的类,它可以根据类型参数自动生成代码。在使用模板类时,我们需要指定类型参数,这样就能生成相应的代码。
#### 示例:模板类Stack
cpptemplate <typename T> class Stack { private: T* data; int size; public: // 构造函数 Stack(int capacity) : size(0), data(new T[capacity]) {} // 销毁函数 ~Stack() { delete[] data; } // 入栈函数 void push(T value) { if (size ==0) { data[size++] = value; } else { T* temp = new T[size +1]; for (int i =0; i < size; ++i) { temp[i] = data[i]; } delete[] data; data = temp; data[size++] = value; } } // 出栈函数 T pop() { if (size ==0) { throw std::out_of_range("Stack is empty"); } else { return data[--size]; } } // 查看顶部元素函数 T top() const { if (size ==0) { throw std::out_of_range("Stack is empty"); } else { return data[size -1]; } } // 是否为空函数 bool isEmpty() const { return size ==0; } };
#### 示例:模板类Vector
cpptemplate <typename T> class Vector { private: T* data; int capacity; int size; public: // 构造函数 Vector(int initialCapacity =1) : capacity(initialCapacity), size(0), data(new T[capacity]) {} // 销毁函数 ~Vector() { delete[] data; } // 扩容函数 void resize(int newCapacity) { if (newCapacity < size) { throw std::out_of_range("New capacity is less than current size"); } else { T* temp = new T[newCapacity]; for (int i =0; i < size; ++i) { temp[i] = data[i]; } delete[] data; data = temp; capacity = newCapacity; } } // 添加元素函数 void push_back(T value) { if (size == capacity) { resize(capacity *2); } data[size++] = value; } // 删除最后一个元素函数 T pop_back() { if (size ==0) { throw std::out_of_range("Vector is empty"); } else { return data[--size]; } } // 查看最后一个元素函数 T back() const { if (size ==0) { throw std::out_of_range("Vector is empty"); } else { return data[size -1]; } } // 是否为空函数 bool isEmpty() const { return size ==0; } };
### 模板函数模板函数是一种特殊的函数,它可以根据类型参数自动生成代码。在使用模板函数时,我们需要指定类型参数,这样就能生成相应的代码。
#### 示例:模板函数max
cpptemplate <typename T> T max(T a, T b) { return (a > b) ? a : b; }
#### 示例:模板函数swap
cpptemplate <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
### 总结在本文中,我们学习了C++中的模板类和函数。模板类是一种特殊的类,它可以根据类型参数自动生成代码。在使用模板类时,我们需要指定类型参数,这样就能生成相应的代码。模板函数是一种特殊的函数,它也可以根据类型参数自动生成代码。在使用模板函数时,我们同样需要指定类型参数。这两种机制使得我们能够写出通用的、类型安全的代码,极大地提高了编程效率和代码质量。