【C++】模板

C++ 模板学习笔记

1. 模板的基本概念

  • 作用:模板是一种泛型编程技术,允许在编写代码时使用泛型类型或者泛型函数,从而实现代码的通用性。
  • 优势:模板使得代码更具通用性和灵活性,可以减少代码的重复编写,提高代码的可重用性。
  • 发展历程:模板最早出现在C++语言中,后来被其他编程语言如Java、C#等广泛采用。

示例代码

#include <iostream>

// 定义一个函数模板
template <typename T>
T add(T a, T b) {
    return a + b;
}

int main() {
    // 使用函数模板
    std::cout << "Sum of 5 and 7: " << add(5, 7) << std::endl;
    std::cout << "Sum of 3.5 and 2.5: " << add(3.5, 2.5) << std::endl;

    return 0;
}

2. 模板的应用场景

  • 容器类:STL中的容器类(如vector、list等)使用了模板技术,可以存储任意类型的数据。
  • 算法函数:STL中的算法函数(如sort、find等)也使用了模板技术,可以适用于不同类型的数据。
  • 数据结构:自定义的数据结构(如栈、队列等)可以使用模板来实现,以实现通用性。

示例代码

#include <iostream>
#include <vector>

// 使用模板实现通用的打印函数
template <typename T>
void print(const std::vector<T>& vec) {
    for (const auto& elem : vec) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;
}

int main() {
    // 使用模板打印不同类型的容器
    std::vector<int> intVec = {1, 2, 3, 4, 5};
    std::vector<double> doubleVec = {1.1, 2.2, 3.3, 4.4, 5.5};
    std::cout << "Int vector: ";
    print(intVec);
    std::cout << "Double vector: ";
    print(doubleVec);

    return 0;
}

3. 模板的使用技巧

  • 模板参数:模板参数可以是类型参数(如typename T)或者非类型参数(如int N)。
  • 模板特化:可以对模板进行特化,以处理特定类型的情况。
  • 模板嵌套:可以在模板类或者模板函数中嵌套使用其他模板。

示例代码

#include <iostream>

// 模板类
template <typename T>
class Pair {
public:
    Pair(const T& first, const T& second) : first(first), second(second) {}
    T getFirst() const { return first; }
    T getSecond() const { return second; }

private:
    T first;
    T second;
};

// 模板函数
template <typename T>
void printPair(const Pair<T>& pair) {
    std::cout << "(" << pair.getFirst() << ", " << pair.getSecond() << ")" << std::endl;
}

int main() {
    // 使用模板类和模板函数
    Pair<int> intPair(1, 2);
    Pair<double> doublePair(3.3, 4.4);
    std::cout << "Int pair: ";
    printPair(intPair);
    std::cout << "Double pair: ";
    printPair(doublePair);

    return 0;
}

4. 实战案例分析

  • 容器类实现:自定义一个通用的动态数组容器类,支持存储任意类型的数据。
  • 算法函数实现:实现一个通用的快速排序算法函数,可以适用于不同类型的数据。
  • 数据结构实现:实现一个通用的二叉树数据结构,支持存储任意类型的数据。

示例代码

// 容器类实现示例
template <typename T>
class DynamicArray {
public:
    DynamicArray(int size) : size(size) {
        data = new T[size];
    }
    ~DynamicArray() {
        delete[] data;
    }

    void set(int index, const T& value) {
       
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值