C++ 模板机制与 STL 基础
泛型编程入门
模板本质上是一种通用编程工具。想象它是一个模具,只需倒入不同的材料(类型),就能获得不同材质的铸件。
函数模板
实现一个交换函数很容易,但默认版本往往只能处理整型。若需支持浮点数或字符型,单纯依靠函数重载会导致代码冗余、维护困难且复用率低。此时,函数模板便派上了用场,它是实现泛型编程的基础。
所谓泛型编程,就是编写与类型无关的通用代码。
template <typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
template<typename T> 定义了一个模板,通过一份代码即可满足多种需求。这里的 typename 也可以替换为 class,两者在大多数情况下等价。
函数模板代表了一个函数家族,在使用时会被参数化,根据实参类型生成特定版本的函数。
实例化机制
使用不同类型的参数调用函数模板的过程称为实例化,分为隐式和显示两种:
- 隐式实例化:让编译器根据传入的实参自动推演模板参数的实际类型。
- 显示实例化:在函数名后的
<>中明确指定模板参数的类型。
匹配原则
- 非模板函数与同名函数模板可同时存在。若条件相同,优先调用非模板函数。
- 如果模板能产生出更好匹配的函数,则选择模板。
- 模板函数不允许自动类型转换,而普通函数可以。
类模板
类模板的定义格式如下:
template <class T1, class T2, ..., class Tn>
class ClassName {
// 成员定义
};
类模板实例化需在类名后跟 <>,将具体类型放入其中。例如 Stack<int> 才是具体的类型,而 Stack 只是模板。
STL 简介
STL(Standard Template Library)是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,更是一个包罗数据结构与算法的软件框架。
学习 STL 主要涵盖五个部分,其中空间配置器通常直接使用即可,无需深究底层细节。
std::string 详解
掌握 string 主要围绕两个维度:一是熟悉标准库提供的接口,二是理解其模拟实现的逻辑。
string 实际上是被 typedef 的类型,真名为 basic_string<char>,专门用于存储字符序列。
构造函数与赋值
最常用的几个构造方式包括无参构造、拷贝构造、从 C 风格字符串构造等。
std::string s1;
;
;
;
;
s1 = s2;


