一、模板机制
1. 函数模板
模板本质上是一个模具,通过填入不同的类型参数,生成特定类型的代码。在 C++ 中,这实现了泛型编程的基础——编写与类型无关的通用代码。
假设我们需要一个交换函数,如果只写整型版本,遇到浮点或字符型就得重载,不仅代码冗余,维护成本也高。函数模板允许我们定义一次,编译器根据实参自动实例化。
template<typename T>
void Swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
这里 template<typename T> 定义了模板参数,typename 也可以替换为 class,两者在函数模板语境下通常等价。
2. 实例化原理
函数模板本身不是函数,而是编译器的蓝图。当调用时,编译器会根据传入的实参类型推导出具体类型,生成对应的函数副本,这个过程叫实例化。
- 隐式实例化:编译器根据实参自动推导类型。
- 显示实例化:显式指定模板参数,如
Swap<int>(a, b)。
3. 匹配原则
在实际使用中,需注意以下优先级:
- 非模板函数优先于同名函数模板(除非模板能产生更好匹配)。
- 模板函数不支持自动类型转换,普通函数可以。
4. 类模板
类模板的定义格式类似,但实例化时需要明确类型:
template<class T1, class T2> class 类模板名 {
// 成员定义
};
// 实例化
Stack<int> st1; // 真正的类型是 Stack<int>
二、STL 简介
STL(Standard Template Library)是 C++ 标准库的核心,包含容器、算法和迭代器三大组件。除了空间配置器通常直接使用外,主要关注数据结构与算法框架。
三、String 类详解
std::string 本质是 basic_string<char> 的 typedef,用于管理字符串序列。学习它需掌握接口用法及底层模拟实现。
1. 构造函数
常用的构造方式包括默认构造、拷贝构造、C 风格字符串构造等:
string s1; // 默认构造
string s2(s1); // 拷贝构造
string ;
;
;


