总结
这一章我们引入了模板这一概念。模板是生成代码的语法。函数模板有能力生成一系列函数,类模板有能力生成一系列类。从模板生成代码的过程称为模板的实例化。模板实例化所做的事情就是将模板声明中出现的模板形参替换为模板实参。
模板参数可以是类型参数,这也是模板强大能力的体现之处。我们在大量的代码(包括后面的 STL)中都使用了类型参数。模板参数还可以是非类型参数,但它要求实参必须是常量——这是因为实例化总是编译期间发生的。
我在中间插入了关于函数默认实参和默认模板实参的知识。函数默认实参可以理解为添加了若干个重载,而默认模板实参则在后面的章节中会体现作用。
标准模板库(STL)是 C++ 标准库的重要组成部分。它分为容器、迭代器和算法三个部分,而这一章则简略地讲解了容器和迭代器。
容器是存储数据的工具。STL 容器分为顺序容器、关联容器和容器适配器三种。顺序容器(5 种)能保证元素的顺序是可控制的,而关联容器(8 种)可以实现快速的查找。容器适配器(3 种)通过更改容器的接口来实现一些典型的数据结构。
迭代器是访问容器的重要途径。在感性理解上,迭代器相当于指针在数组的作用;而更具体地讲,满足一定要求(可读、自增、多趟、自减、随机访问、连续存储)的类型就是符合迭代器的概念。每一个容器都定义一个类型别名 iterator
作为访问其元素的迭代器,并通过 begin
end
成员函数来得到指向其头部或尾部下一位置的迭代器。范围 for 是简化迭代器操作的语法,可以用来方便地遍历容器。
关于 STL 容器的更多资料,请查阅 CppReference。