hwaityd的小窝

Loading...

模板(Templates)

模板是C++中支持泛型编程的一种机制,它允许开发者定义使用任意类型作为参数的函数和类。

1. 函数模板

  • 概念:函数模板是一种允许函数接受任意类型参数的模板。
  • 语法
    template <typename T>
    void functionName(T param) {
        // 函数体,使用泛型类型T
    }
    
  • 特点:函数模板在调用时才确定具体的类型,提供了代码复用和灵活性。

示例代码

template <typename T>
T max(T a, T b) {
    return (a > b) ? a : b;
}

int main() {
    std::cout << max(1, 2) << std::endl;    // 使用整型
    std::cout << max(2.5, 3.1) << std::endl; // 使用浮点型
    return 0;
}

2. 类模板

  • 概念:类模板是一种支持创建接受任意类型参数的类的模板。
  • 语法
    template <typename T>
    class ClassName {
    public:
        T member;
    
        ClassName(T value) : member(value) {}
    
        // 类成员函数
        void function() {
            // 使用泛型类型T
        }
    };
    
  • 特点:类模板允许创建具有不同数据类型的类实例。

示例代码

template <typename T>
class Stack {
private:
    T* data;
    size_t size;
    size_t capacity;

public:
    Stack(size_t capacity) : capacity(capacity), size(0), data(new T[capacity]) {}
    ~Stack() { delete[] data; }

    // 类成员函数
    void push(const T& value) {
        data[size++] = value;
    }

    T pop() {
        return data[--size];
    }
};

int main() {
    Stack<int> intStack(10);
    Stack<std::string> stringStack(10);
    // 使用Stack类模板
    return 0;
}

3. 非类型模板参数

  • 概念:非类型模板参数是在编译时已知且用于控制模板行为的参数,它们不用于存储数据。
  • 语法
    template <typename T, int size>
    class Array {
        T arr[size];
    };
    
  • 特点:非类型模板参数通常用于数组大小或其他编译时常量。

示例代码

template <typename T, int N>
class Array {
public:
    T elements[N];

    void init() {
        for (int i = 0; i < N; ++i) {
            elements[i] = 0;
        }
    }
};

int main() {
    Array<int, 5> myArray;
    myArray.init(); // 初始化大小为5的整型数组
    return 0;
}

4. 标准模板库STL(Standard Template Library)

  • 概念:STL是C++标准库的一部分,提供了一组通用的模板类和函数,用于处理常见的数据结构和算法。
  • 特点:STL包括容器(如std::vectorstd::map)、迭代器、算法(如std::sortstd::find)和函数对象(如std::plusstd::greater)。

示例代码

#include <vector>
#include <string>
#include <algorithm>
#include <iostream>

int main() {
    std::vector<std::string> strings;
    strings.push_back("hello");
    strings.push_back("world");

    std::sort(strings.begin(), strings.end());

    for (const auto& str : strings) {
        std::cout << str << std::endl;
    }
    return 0;
}

模板是C++中强大的特性之一,它们提供了代码复用、类型安全性和性能优化。STL是模板最显著的应用之一,它极大地扩展了C++的能力,使其成为处理各种数据结构和算法的强大工具。

posted on 2024-10-20 00:42  hwaityd  阅读(6)  评论(0编辑  收藏  举报