c++template
时间: 2023-09-13 07:08:12 浏览: 67
C++ 中的模板是一种通用编程工具,可以让我们编写与数据类型无关的代码。通过模板,我们可以编写一次代码,然后在多种数据类型上运行,而不必为每种数据类型编写单独的代码。
C++ 中的模板可以分为函数模板和类模板。函数模板是一个通用的函数,可以在运行时接受不同类型的参数。类模板是一个通用的类,可以在运行时实例化为不同的类型。
下面是一个简单的函数模板示例:
```
template<typename T>
T max(T x, T y) {
return (x > y) ? x : y;
}
```
在上面的代码中,`typename` 关键字指定了一个类型参数,即 `T`。然后我们定义了一个 `max` 函数,它接受两个类型为 `T` 的参数,并返回它们中较大的一个。
下面是一个使用函数模板的示例:
```
int a = 5, b = 10;
double c = 3.14, d = 2.71;
cout << max(a, b) << endl; // 输出 10
cout << max(c, d) << endl; // 输出 3.14
```
在这个示例中,我们用不同的数据类型调用了 `max` 函数,并且它能够正确地返回两个值中较大的一个。
类模板的语法与函数模板类似,但是我们需要在类名后面加上尖括号,并指定一个或多个类型参数。下面是一个简单的类模板示例:
```
template<typename T>
class Vector {
public:
Vector() {}
void push_back(T value) { data[size++] = value; }
T operator[](int index) { return data[index]; }
private:
T data[100];
int size = 0;
};
```
在上面的代码中,我们定义了一个 `Vector` 类模板,它可以存储不同类型的数据。我们提供了一些基本的方法,如 `push_back` 和 `operator[]`,以便在运行时添加元素并访问元素。
下面是一个使用类模板的示例:
```
Vector<int> v1;
v1.push_back(1);
v1.push_back(2);
cout << v1[0] << endl; // 输出 1
cout << v1[1] << endl; // 输出 2
Vector<double> v2;
v2.push_back(3.14);
v2.push_back(2.71);
cout << v2[0] << endl; // 输出 3.14
cout << v2[1] << endl; // 输出 2.71
```
在这个示例中,我们实例化了两个不同的 `Vector` 对象,一个存储 `int` 类型的值,另一个存储 `double` 类型的值。我们可以用相同的方法向它们添加元素,并访问它们的值。
阅读全文