Skip to main content

Command Palette

Search for a command to run...

C++ 模板 核心知识点梳理

Updated
•1 min read•View as Markdown
C++ 模板 核心知识点梳理
T
确定性世界里,一个被允许的异常

C++ 模板 核心知识点梳理

C++ 模板是泛型编程的核心,用来实现代码复用 + 类型无关,让一份代码支持多种数据类型,分为函数模板和类模板两大类。

一、模板是什么?

一句话:模板就是代码的 “模具”,编译器会根据你传入的类型(int/double/ 自定义类等),自动生成对应类型的代码。

  • 优点:代码复用、类型安全、无运行时开销

  • 本质:编译期多态(不同于虚函数的运行时多态)

二、函数模板

  1. 基本语法
// 模板声明
template <typename T>  // T 是类型参数(typename = class)class是以前写法不推荐
T add(T a, T b) {
    return a + b;
}

2.使用方式

// 自动推导类型(推荐)
cout << add(1, 2) << endl;       // int
cout << add(1.1, 2.2) << endl;   // double

// 显式指定类型
cout << add<int>(3, 4) << endl;

注意:在使用该模板时,所有输入参数的类型必须保持一致,均为同一类型 T。

3.多参数模板

template <typename T1, typename T2>
void print(T1 a, T2 b) {
    cout << a << " " << b << endl;
}

三、类模板

1.基本语法

template <typename T>
class MyVector {
private:
    T* data;
public:
    void push(T val);
};

// 类外实现成员函数
template <typename T>
void MyVector<T>::push(T val) {
    // 逻辑
}

2.使用方式

类模板必须显式指定类型,无法自动推导,即:类模板在定义对象时,必须用 <类型> 显式告诉编译器

举个例子:在上述MyVector类创建int类型的vector:MyVecotr<int>(1)

3.非参数型模板参数

模板参数不只是类型,还可以是常量值(整数、指针等):

template <typename T, int SIZE>  // SIZE 是数值
class Array {
    T arr[SIZE];
};

// 使用
Array<int, 10> arr;  // 定义一个大小为10的数组

四:注意点

1、在声明一个需要使用到模板的函数/类时,必须在其上方加上对应模板声明,即:一个模板对应一个函数/类,同一个 template<...> 不能同时给多个函数 / 类共用。

2、类模板必须写 <类型>,不能自动推导

3、函数模板可以自动推导,但参数类型必须一致

7 views

More from this blog

离散数学5.1-二元关系一

一、有序对和笛卡尔积 1、有序对(序偶):由两个元素 x 和 y 按照确定顺序排列组成的二元组,记作⟨x, y⟩ 2、笛卡尔积:以 A 中元素为第一元、B 中元素为第二元,构造所有有序对⟨x,y⟩; 由全部这类有序对构成的集合,称为 A 与 B 的笛卡尔积,记作 AXB 例题: 已知 A={a,b}, B={0,1,2},求笛卡尔积 A × B、B × A A × B(前元取自 A,后元取自 B

Jun 25, 20261 min read14
离散数学5.1-二元关系一
天

天创域

37 posts

欢迎来到天创的博客