C++ 函数模版和类模版的基本用法:交换变量的值、实现简单的栈

发布时间:2025-04-29      访问量:29
在 C++ 里,模板属于泛型编程的重要工具,能让你编写和类型无关的代码。下面分别介绍函数模板和类模板的基本用法。

函数模板
函数模板可定义一个通用的函数,它能处理多种不同的数据类型。其语法格式如下:
cpp template <typename T> 返回类型 函数名(参数列表) { // 函数体 }
下面是一个简单的交换两个变量值的函数模板示例:
cpp #include <iostream> // 定义一个函数模板用于交换两个变量的值 template <typename T> void swapValues(T& a, T& b) { T temp = a; a = b; b = temp; } int main() { int num1 = 10, num2 = 20; std::cout << "Before swap: num1 = " << num1 << ", num2 = " << num2 << std::endl; swapValues(num1, num2); std::cout << "After swap: num1 = " << num1 << ", num2 = " << num2 << std::endl; double d1 = 1.5, d2 = 2.5; std::cout << "Before swap: d1 = " << d1 << ", d2 = " << d2 << std::endl; swapValues(d1, d2); std::cout << "After swap: d1 = " << d1 << ", d2 = " << d2 << std::endl; return 0; }
在上述代码中,`swapValues` 函数模板可以处理不同类型的变量,比如 `int` 和 `double`。

类模板
类模板允许你定义一个通用的类,这个类可以处理不同的数据类型。其语法格式如下:
cpp template <typename T> class 类名 { // 类的成员 };
下面是一个简单的栈类模板示例:
cpp #include <iostream> #include <vector> // 定义一个栈类模板 template <typename T> class Stack { private: std::vector<T> elements; public: // 入栈操作 void push(const T& value) { elements.push_back(value); } // 出栈操作 void pop() { if (!elements.empty()) { elements.pop_back(); } } // 获取栈顶元素 T top() const { if (!elements.empty()) { return elements.back(); } throw std::out_of_range("Stack is empty"); } // 判断栈是否为空 bool empty() const { return elements.empty(); } }; int main() { Stack<int> intStack; intStack.push(10); intStack.push(20); std::cout << "Top element of intStack: " << intStack.top() << std::endl; intStack.pop(); std::cout << "Top element of intStack after pop: " << intStack.top() << std::endl; Stack<double> doubleStack; doubleStack.push(1.5); doubleStack.push(2.5); std::cout << "Top element of doubleStack: " << doubleStack.top() << std::endl; return 0; }
在这个代码中,`Stack` 类模板能够处理不同类型的栈,例如 `int` 类型和 `double` 类型。

总结
- 函数模板借助 `template <typename T>` 来定义通用函数,这样就能处理不同类型的数据。
- 类模板通过 `template <typename T>` 定义通用类,从而可以处理不同类型的数据。

通过模板,你能够编写更加通用和可复用的代码。
堆内存
多线程
strdup
初始化器
冒泡排序
增删改查
BufferedReader
输入输出
面向对象
生命周期
闭包的概念
原型链
Flask
mysql-connector-python
单例模式
浅拷贝
隔离级别
索引
InnoDB
左连接
聚合函数
PuTTY
TRUNCATE
str_starts_with_many
DateTime
array_combine
闭包的概念