【数据结构实战C++】8 泛型编程

举报
CodeAllen 发表于 2021/10/29 23:02:47 2021/10/29
【摘要】 【数据结构实战C++】8 泛型编程 作者 CodeAllen ,转载请注明出处 数据结构的特点 -专注于数据元素之间的关系-专注于特定结构之上的算法 也就是说数据结构并不关注数据元素...

【数据结构实战C++】8 泛型编程

作者 CodeAllen ,转载请注明出处


数据结构的特点

  • -专注于数据元素之间的关系
  • -专注于特定结构之上的算法

也就是说数据结构并不关注数据元素的具体类型(这个是很关键的一个概念)

如何为数据结构的学习选择合适的编程语言?

从上边的分析可以知道,支持泛型编程的语言最适合学习数据结构

c++是支持泛型编程的,其中的模板就是泛型编程

泛型编程概念
-不考虑具体数据类型的编程方式

对于swap函数可以考虑下方的泛型写法

void swap(T& a , T& b)
{
    T t = a;
    a = b;
    b = t;
} 

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

swap泛型写法中的T并不是一个具体的数据类型,而是泛指任意的数据类型

c++中的函数模板
-一种特殊的函数可用不同类型进行调用
-看起来和普通函数很相似,区别是类型可以被参数化

template<typename T>
void swap(T& a , T& b)
{
    T t = a;
    a = b;
    b = t;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

函数模板的语法规则

  • -template关键字用于声明开始进行泛型编程
  • -typename 关键字用于声明泛型类型
    在这里插入图片描述

函数模板的使用
-自动类型推导调用
-具体类型显示调用

int a = 0;
int b = 1;

swap(a, b);   //自动推导

float c = 2;
float d = 3;

swap<float>(c, d);  //显示调用

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

实验:函数模板

#include <iostream>
using namespace std;
template <typename T>
void Swap(T& a, T& b)
{
    T t = a;
    a = b;
    b = t;
}
int main()
{
    int a = 2;
    int b = 1;
    Swap(a, b);
    cout << "a = " << a << " " << "b = " << b << endl;
    double c = 0.01;
    double d = 0.02;
    Swap<double>(c, d);
    cout << "c = " << c << " " << "d = " << d << endl;
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

泛型编程在c++的第二个应用
c++中的类模板

-以相同的方式处理不同的类型
-在类声明前使用template进行标识
-用于说明类中使用的泛指类型T
在这里插入图片描述

类模板的具体使用
-只能显示指定具体类型 ,无法自动推导
-使用具体类型 定义对象
在这里插入图片描述

实验:类模板

#include <iostream>
using namespace std;
template <typename T>
void Swap(T& a, T& b)
{
    T t = a;
    a = b;
    b = t;
}

template <typename T>
class Op
{
public:
    T process(T v)
    {
        return v * v;
    }
};

int main()
{
    Op<int> opInt;       //定义对象
    Op<double> opDouble;
    cout << "5 * 5 = " << opInt.process(5) << endl;
    cout << "0.3 * 0.3 = " << opDouble.process(0.3) <<endl;
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

小结
模板是泛型编程理论在c++中的实现
函数模板支持参数的自动推导和显示指定
类模板在使用时只能显示指定类型
类模板非常适用于编写数据结构相关的代码

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/105525501

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。