26.C++模板
约 259 字小于 1 分钟
函数模板
template <typename T, typename U>
void printPair(T a, U b) {
cout << a << " and " << b << endl;
}
int main() {
printPair(1, "hello"); // 编译器能够推导T为int,U为const char*
printPair<int>("test", 100); // 必须显式指定其中一个模板参数
}
类模板
template <typename T>
class ClassName {
// 成员变量和方法使用模板参数T
};
#include <iostream>
#include <vector>
template <typename T>
class Stack {
private:
std::vector<T> data; // 使用 vector 存储元素
public:
void push(const T& value) { // 压栈
data.push_back(value);
}
void pop() { // 出栈
if (!data.empty()) {
data.pop_back();
} else {
std::cerr << "Stack is empty!\n";
}
}
T top() const { // 获取栈顶元素
if (!data.empty()) {
return data.back();
} else {
throw std::out_of_range("Stack is empty!");
}
}
bool empty() const { // 判断栈是否为空
return data.empty();
}
size_t size() const { // 获取栈大小
return data.size();
}
};
int main() {
Stack<int> intStack; // 创建存储 int 类型的栈
intStack.push(10);
intStack.push(20);
intStack.push(30);
std::cout << "栈顶元素: " << intStack.top() << std::endl;
intStack.pop();
std::cout << "栈顶元素(出栈后): " << intStack.top() << std::endl;
Stack<std::string> stringStack; // 创建存储 string 类型的栈
stringStack.push("Hello");
stringStack.push("World");
std::cout << "字符串栈顶元素: " << stringStack.top() << std::endl;
return 0;
}