C++函数模板与类模板详解:STL常用算法实现

5星 · 超过95%的资源 需积分: 29 7 下载量 186 浏览量 更新于2024-07-18 1 收藏 1.98MB DOCX 举报
C++模板是STL(Standard Template Library)中的重要组成部分,它允许开发者编写具有高度灵活性和通用性的代码,从而提高代码的复用性和效率。本文主要介绍了C++中的两种模板机制:函数模板和类模板。 1. **函数模板**: - 功能与需求:函数模板的出现是为了满足在不同数据类型下实现相同逻辑的需求,例如需要为char、int和double等不同类型的数据编写交换值的函数。通过模板,我们可以定义一个通用的`myswap`函数,只编写一次,然后根据实际使用的数据类型自动调整其行为。 - 语法: - 定义:使用`template`关键字,后面跟随类型参数表,如`template<typename T1, typename T2>`。类型参数可以是`typename`修饰的类型名或`class`修饰的类名。 - 调用:函数模板可以通过显式指定类型(如`myswap<float>(a, b)`)或者让编译器自动推导类型(如`myswap(a, b)`)来调用。 - 示例: ```cpp template<typename T, typename T2> void swap(T& a, T2& b) { T tmp; // 实现交换逻辑... } int main() { int a = 5, b = 10; char c = 'a', d = 'b'; swap(a, b); swap(c, d); } ``` 2. **类模板**: - 类属参数化:类模板也支持类型参数,这被称为类属。通过这种方式,程序可以根据需要创建不同类型的对象,而无需为每个具体类型单独定义类。 - 逻辑抽象:类模板使程序员能够将算法从数据类型的具体实现中抽离出来,专注于逻辑结构,提高代码的可重用性和模块化。 - 举例: ```cpp template <typename T> class ArraySorter { public: void sortArray(T* array, int num) { // 类模板实现排序逻辑... } }; class PrintArray { public: template <typename T> void printArray(T* array, int num) { // 类模板实现打印逻辑... } }; int main() { ArraySorter<int> intSorter; PrintArray<char> charPrinter; intSorter.sortArray(&arrInts, 10); charPrinter.printArray(&arrChars, 5); } ``` 3. **模板函数和模板参数作为函数参数**: - 在C++中,函数模板还可以作为其他函数的参数,进一步增强了代码的灵活性。例如,上面的`sortArray`和`printArray`函数可以接受任何类型数组进行操作。 通过理解并熟练运用C++模板,程序员可以编写出更具泛型特性的代码,降低重复劳动,提高代码质量和维护性。学习模板不仅是提升C++编程能力的关键,也是理解和使用STL库的基础。