函数模板是C++泛型编程的基石,通过类型参数化实现通用算法。使用template<typename T>定义,可编写适用于多种类型的函数,如myMax、printPair、printArray和bubbleSort,编译器根据调用时的实际类型自动实例化具体函数,提升代码复用性与灵活性。

在C++中,要实现通用算法,函数模板是那个不可或缺的基石。它允许我们编写一份通用的函数代码,这份代码可以处理各种不同的数据类型,而无需为每一种类型都重新写一遍。简单来说,就是通过类型参数化,让你的函数变得“聪明”起来,能适应不同的输入类型,从而实现真正意义上的泛型编程。
函数模板的核心思想,其实就是把类型当作参数来传递。你想想看,我们平时写函数,参数是值;现在,我们让参数可以是“类型”。这样一来,比如你要写一个比较两个数大小的函数,传统做法可能要写
max(int, int)
max(double, double)
max(std::string, std::string)
max<T>(T a, T b)
定义一个函数模板,语法上非常直观:
template <typename T>
template <class T>
typename
T
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // for std::sort
// 示例1: 最简单的通用max函数
template <typename T>
T myMax(T a, T b) {
return (a > b) ? a : b;
}
// 示例2: 带有多个类型参数的函数模板
template <typename T1, typename T2>
void printPair(T1 val1, T2 val2) {
std::cout << "Pair: " << val1 << ", " << val2 << std::endl;
}
// 示例3: 非类型模板参数,比如用于固定大小数组
// 这种用法在C++11/14之前比较常见,现在通常用std::array
template <typename T, int N>
void printArray(const T (&arr)[N]) { // 注意这里引用数组的写法
std::cout << "Array elements (" << N << "): ";
for (int i = 0; i < N; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
// 示例4: 一个简单的通用排序函数 (虽然实际中会用std::sort)
template <typename T>
void bubbleSort(std::vector<T>& vec) {
for (size_t i = 0; i < vec.size(); ++i) {
for (size_t j = 0; j < vec.size() - 1 - i; ++j) {
if (vec[j] > vec[j+1]) {
T temp = vec[j];
vec[j] = vec[j+1];
vec[j+1] = temp;
}
}
}
}
int main() {
std::cout << "Max of int: " << myMax(5, 10) << std::endl;
std::cout << "Max of double: " << myMax(3.14, 2.71) << std::endl;
std::cout << "Max of string: " << myMax(std::string("world"), std::string("hello")) << std::endl;
printPair(10, "C++");
printPair(3.14, true);
int intArray[] = {1, 5, 2, 8};
printArray(intArray);
std::vector<int> intVec = {5, 2, 9, 1, 7};
std::cout << "Original vector: ";
for (int x : intVec) std::cout << x << " ";
std::cout << std::endl;
bubbleSort(intVec);
std::cout << "Sorted vector: ";
for (int x : intVec) std::cout << x << " ";
std::cout << std::endl;
std::vector<std::string> strVec = {"banana", "apple", "cherry"};
std::cout << "Original string vector: ";
for (const std::string& s : strVec) std::cout << s << " ";
std::cout << std::以上就是C++如何定义函数模板实现通用算法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号