推荐昆明做网站建设,邯郸网站制作外包,龙泉驿网站建设,群晖wordpress安装主题下载失败学习交流加 个人qq#xff1a; 1126137994个人微信#xff1a; liu1126137994学习交流资源分享qq群#xff1a; 962535112 今天开始系统性学习数据结构内容#xff0c;之前也看过大话数据结构这本书#xff0c;对大多数概念以及数据结构都有一定的了解#xff0c;但是就是… 学习交流加 个人qq 1126137994个人微信 liu1126137994学习交流资源分享qq群 962535112 今天开始系统性学习数据结构内容之前也看过大话数据结构这本书对大多数概念以及数据结构都有一定的了解但是就是没有自己亲自去实现它的代码。 今天开始用C语言从0编写数据结构所有的代码实现学习的编程工具为QT。也希望同道中人可以加q1126137994.共同学习进步。 今天第一次先不讲数据结构的知识先告诉大家为什么用C语言来学习数据结构。
为什么用C语言来学习数据结构呢 首先我们来看一下数据结构的特点 -专注于数据元素之间的关系 -专注于特定结构之上得算法
我们发现数据结构并不关注数据元素的具体类型。既然它不关注数据元素的具体类型那么泛型编程再适不过了。那么什么是泛型编程呢
泛型编程的概念不考虑具体数据类型的编程方式。 举个例子 对于Swap函数可以考虑下面的泛型写法
void Swap(T a,T b)
{T t a;a b;b t;
}Swap泛型写法中的T不是一个具体的数据类型而是泛指任意的数据类型。 学过C语言的应该就会发现C中的模板技术不就是泛型编程么
C中的函数模板 -一种特殊的函数可用不同类型进行调用 -看起来和普通函数类似区别是类型可被参数化。
函数模板的语法法则 *template关键字用于声明开始进行泛型编程 *typename关键字用于声明泛指类型
类模板的语法法则 *以相同的方式处理不同的类型 *在类声明前使用template关键字进行标识 *typename T用于说明类中使用的泛指类型T 例如
template typename T
class Operator
{
public:T op(T a, T b);
};如何使用模板 1.函数模板的使用 -自动类型推倒调用 -具体类型显示调用 例如
int a 0;
int b 1;
Swap(a, b); //自动推倒数据类型
float c 0.1;
float d 0.2;
Swapfloat(c, d); //显示的调用具体的数据类型2.类模板的使用 -只能显示指定具体的数据类型无法自动推倒 -使用具体类型type定义对象 例如
Operatorint op1;
Operatorstring op2;int i op1.op(1, 2);
string s op2.op(lyy, C);下面看一个完整的代码
#include iostreamusing namespace std;templatetypename 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()
{int a 1;int b 2;Swap(a,b); //函数的模板的调用可以自动识别数据类型cout a a b b endl;double c 0.01;double d 0.02;Swapdouble(c,d); //函数的模板的调用显示指定数据类型cout c c d d endl;Opint opInt; //类定义对象时必须加type特定的类型定义Opdouble opDouble; //类定义对象时必须加type特定的类型定义cout 5*5 opInt.process(5) endl;cout 0.3*0.3 opDouble.process(0.3) endl;return 0;
}在QT上运行的结果为
总结 -模板是泛型编程理论在C的实现 -函数模板支持参数的自动推倒和显示指定 -类模板在使用时只能显示的指定类型 -类模板非常适用于编写数据结构相关的代码
想一起探讨以及获得各种学习资源加我有我博客中写的代码的原稿 qq1126137994 微信liu1126137994 可以共同交流关于嵌入式操作系统C语言C语言数据结构等技术问题。