文章

九:模板

九:模板

前文

STL容器类可以赋int等类型创建类实例,这个底层语法是模板, 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

正文

模板关键字为template, 一般类型以字母T表示泛化类型。 C++中的模板语法支持函数模板和类模板。函数模板允许编写通用函数,可以用于不同类型的参数,从而实现代码的重用和泛化。

函数模板

基本语法:

1
2
3
4
5
6
7
8
9
10
11
12
template <typename type> ret-type func-name(parameter list)
{
   // 函数的主体
}
// 如:
template <typename T>
T add(T a, T b) {
    return a + b;
}
// 使用:
add(1, 3);
add(1.0, 3.0);

类模板

基本语法:

1
2
3
4
5
6
7
8
9
10
template <typename T>
class ClassName {
public:
    // 成员函数和成员变量
    T memberFunction(T param) {
        // 函数体
    }
    
    T memberVariable;
};

构造一个栈的模板类,实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <vector>

template <typename T>
class Stack {
private:
    std::vector<T> elements;

public:
    void push(const T& element) {
        elements.push_back(element);
    }

    void pop() {
        if (elements.empty()) {
            throw std::runtime_error("Stack is empty");
        }
        elements.pop_back();
    }

    T top() const {
        if (elements.empty()) {
            throw std::runtime_error("Stack is empty");
        }
        return elements.back();
    }

    bool empty() const {
        return elements.empty();
    }

    size_t size() const {
        return elements.size();
    }
};

int main() {
    Stack<int> intStack;
    intStack.push(1);
    intStack.push(2);
    intStack.push(3);
    std::cout << "Top element: " << intStack.top() << std::endl;
    intStack.pop();
    std::cout << "Top element: " << intStack.top() << std::endl;

    Stack<std::string> stringStack;
    stringStack.push("hello");
    stringStack.push("world");
    std::cout << "Top element: " << stringStack.top() << std::endl;
    stringStack.pop();
    std::cout << "Top element: " << stringStack.top() << std::endl;

    return 0;
}
本文由作者按照 CC BY 4.0 进行授权

热门标签