C++模板 简单实验

devtools/2024/9/23 0:55:03/

C++模板是泛型编程的一个关键组成部分,允许程序员编写独立于数据类型的代码。下面是一些C++模板的应用举例:

1. 函数模板
函数模板允许我们编写一个函数,它可以接受多种类型的参数。
template <typename T>  
T add(T a, T b) {  
    return a + b;  
}  
  
int main() {  
    int x = 5, y = 10;  
    double z = 3.5, w = 4.5;  
      
    std::cout << "Sum of integers: " << add(x, y) << std::endl;  
    std::cout << "Sum of doubles: " << add(z, w) << std::endl;  
      
    return 0;  
}
2. 类模板
类模板允许我们编写一个类,它可以用于多种数据类型。
template <typename T>  
class Array {  
private:  
    T* arr;  
    int size;  
public:  
    Array(T arr[], int s);  
    void print();  
};  
  
template <typename T>  
Array<T>::Array(T arr[], int s) {  
    size = s;  
    this->arr = new T[s];  
    for (int i = 0; i < size; i++)  
        this->arr[i] = arr[i];  
}  
  
template <typename T>  
void Array<T>::print() {  
    for (int i = 0; i < size; i++)  
        std::cout << *(arr + i) << " ";  
    std::cout << std::endl;  
}  
  
int main() {  
    int intArr[] = {1, 2, 3, 4, 5};  
    double doubleArr[] = {1.1, 2.2, 3.3, 4.4, 5.5};  
      
    Array<int> a(intArr, 5);  
    Array<double> b(doubleArr, 5);  
      
    a.print();  
    b.print();  
      
    return 0;  
}
template <typename T>  
class Array {  
private:  
    T* arr;  
    int size;  
public:  
    Array(T arr[], int s);  
    void print();  
};  
  
template <typename T>  
Array<T>::Array(T arr[], int s) {  
    size = s;  
    this->arr = new T[s];  
    for (int i = 0; i < size; i++)  
        this->arr[i] = arr[i];  
}  
  
template <typename T>  
void Array<T>::print() {  
    for (int i = 0; i < size; i++)  
        std::cout << *(arr + i) << " ";  
    std::cout << std::endl;  
}  
  
int main() {  
    int intArr[] = {1, 2, 3, 4, 5};  
    double doubleArr[] = {1.1, 2.2, 3.3, 4.4, 5.5};  
      
    Array<int> a(intArr, 5);  
    Array<double> b(doubleArr, 5);  
      
    a.print();  
    b.print();  
      
    return 0;  
}
3. 模板特化
模板特化允许我们为特定的类型提供模板的特定版本。
template <typename T>  
class MyClass {  
public:  
    void print() {  
        std::cout << "General template." << std::endl;  
    }  
};  
  
template <>  
class MyClass<int> {  
public:  
    void print() {  
        std::cout << "Specialized for int." << std::endl;  
    }  
};  
  
int main() {  
    MyClass<float> obj1;  
    MyClass<int> obj2;  
      
    obj1.print(); // 输出 "General template."  
    obj2.print(); // 输出 "Specialized for int."  
      
    return 0;  
}
4. 模板元编程
模板元编程是C++模板的高级应用,它允许在编译时执行计算和操作类型。例如,可以使用模板递归来计算阶乘:
template <int N>  
struct Factorial {  
    enum { value = N * Factorial<N - 1>::value };  
};  
  
template <>  
struct Factorial<0> {  
    enum { value = 1 };  
};  
  
int main() {  
    std::cout << "5! = " << Factorial<5>::value << std::endl;  
    return 0;  
}


http://www.ppmy.cn/devtools/20072.html

相关文章

OpenCV直方图计算

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV实现直方图均衡 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::split 将图像划分…

大创项目推荐 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

sheng的学习笔记-AI-支持向量机(SVM)

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是向量机 SVM算法原理 SVM基本模型 SVM对偶问题 什么是对偶问题&#xff1a; 为什么使用对偶问题 拉格朗日定理 拉格朗日乘子法 对偶问题算法 非线性SVM算法原理 核函数 常用核函数 软间隔与正则化 软…

书生·浦语大模型开源体系(四)笔记

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

MySQL常见的约束

什么是约束&#xff1f; 限制&#xff0c;限制我们表中的数据&#xff0c;保证添加到数据表中的数据准确和可靠性&#xff01;凡是不符合约束的数据&#xff0c;插入时就会失败&#xff0c;插入不进去的&#xff01; 比如&#xff1a;学生信息表中&#xff0c;学号就会约束不…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址:https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测,这些研究普遍存在两大局限性:其一,它们往往默认所有新闻文本均出自人类之手,忽略了机器深度改写乃至生成的真实新闻日益增长的现象;其二,它们倾向于将所有机器制造的新闻一概视作虚…

Python 中空间数据的 10 个基本操作

读取几何图形首先,让我们从阅读几何图形开始。 来自 csv geoms = pd.read_csv(geometries.csv) 想象一下文件在列几何体下包含多边形,我们现在必须将它们转换为几何类型(默认情况下它们将被读取为字符串)。通常,几何图形将以wkt格式,我们用shapely库进行转换 # if th…

txt大文件拆分(批量版)

之前的python程序只能拆分单个文件&#xff0c;这里重新加了个文件夹拆分的功能&#xff08;打包好的exe文件在文章末尾&#xff09; 使用步骤&#xff1a;运行代码–>把文件放到input文件夹里–>命令行界面回车–>output文件夹输出文件 outputPath "./output&q…