C++模板
时间: 2023-07-13 19:04:27 浏览: 53
C++模板是一种高度通用化的编程技术,它允许在编写代码时使用类型参数、函数参数等参数化的方式。它的主要优点是可以提高代码的可重用性和灵活性,并且可以在编译时进行类型检查和优化。
C++模板分为函数模板和类模板两种类型。函数模板是指一种通用的函数定义,其参数类型不具体指定,而是可以在调用函数时根据实参类型自动推导出来。类模板是指一种通用的类定义,其成员变量类型和成员函数参数类型都可以使用模板参数进行参数化。
以下是一个简单的函数模板示例:
```cpp
template <typename T>
T max(T a, T b)
{
return a > b ? a : b;
}
int main()
{
int a = 5, b = 10;
float c = 6.7, d = 9.8;
cout << max(a, b) << endl; // 输出 10
cout << max(c, d) << endl; // 输出 9.8
return 0;
}
```
在这个例子中,我们定义了一个函数模板 `max`,它可以比较任意类型的数据并返回较大的那个。在 `main` 函数中,我们可以使用该函数模板来比较不同类型的数据。
类模板的使用方法与函数模板类似,以下是一个简单的类模板示例:
```cpp
template<typename T>
class Stack
{
private:
vector<T> elems;
public:
void push(T const& elem);
void pop();
T top() const;
bool empty() const
{
return elems.empty();
}
};
template<typename T>
void Stack<T>::push(T const& elem)
{
elems.push_back(elem);
}
template<typename T>
void Stack<T>::pop()
{
if (elems.empty())
{
throw out_of_range("Stack<>::pop(): empty stack");
}
elems.pop_back();
}
template<typename T>
T Stack<T>::top() const
{
if (elems.empty())
{
throw out_of_range("Stack<>::top(): empty stack");
}
return elems.back();
}
int main()
{
Stack<int> intStack;
intStack.push(7);
intStack.push(5);
cout << intStack.top() << endl; // 输出 5
intStack.pop();
cout << intStack.top() << endl; // 输出 7
Stack<string> stringStack;
stringStack.push("hello");
stringStack.push("world");
cout << stringStack.top() << endl; // 输出 world
stringStack.pop();
cout << stringStack.top() << endl; // 输出 hello
return 0;
}
```
在这个例子中,我们定义了一个类模板 `Stack`,它可以存储任意类型的数据,并且支持常见的栈操作。在 `main` 函数中,我们可以使用该类模板来创建不同类型的栈对象,并对其进行操作。