九:模板
九:模板
前文
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 进行授权