C++泛型函数及模版类

什么是泛型编程?

简单来说,泛型编程,意思就是针对广泛类型的编程方式。具体类型可以有不同的实现方式,但是针对广泛类型编程,就能在需要调用时才指定参数类型或者调用类型。

泛型编程是一种基于发现高效算法的最抽象表示的编程方法。也就是说,以算法为起点并寻找能使其工作并且有效率的工作的最一般的必要条件集。

可以想象的是,很多算法都需要相同的必要条件集,并且这些必要条件集有不同的实现方式。STL标准模版库就是泛型编程的例子。

泛型函数怎么写?

#include<iostream>
using namespace std;
template<typename T>
T * My_find(T *array,T n,T x){
	T* p = array;
	int i;
	for(i=0;i<n;i++){
		if(*p == x){
			return p;
		}
		p++;
	}
	return 0;
}
int main(){
	int a[] = {1,2,3,4,5,6,7,8,10};
	int *result = My_find<int>(a,10,3);
	cout<<(*result)<<"\n"<<endl;
	return 0;
}

上面这个例子是一个泛型函数的实现。

template<typename T> 

这句话的意思是指设定一个泛型类型T。接下来就直接可以将T作为一个参数类型使用了。

int *result = My_find<int>(a,10,3);

这是泛型函数的调用方法。尖括号指定函数泛型的具体类型,然后传入参数。

模版类怎么写?

除了泛型函数,最重要的就是泛型类也就是模版类了。

#include<iostream>
using namespace std;

template<class T>
class Operate{
	public:
	static T add(T a,T b){
		return a+b;
	}
	static T Mul(T a,T b){
		return a*b;
	}
	static T Judge(T a,T b=1){
		if(a>=0)
		return a;
		else
		return a/b;
	}
};
int main(){
	int a,b,c,d,e,x,y,z;
	a=1,b=2,c=3,d=4,e=5;
	x=Operate<int>::add(a,b);
	y=Operate<int>::Mul(c,d);
	z=Operate<int>::Judge(e,b);
	cout<<x<<" "<<y<<" "<<z<<" "<<endl;
	return 0;
}

上面这个例子是一个模版类的实现。

template<class T>

这句话定义了一个模版类类型。

x=Operate<int>::add(a,b);
y=Operate<int>::Mul(c,d);
z=Operate<int>::Judge(e,b);

调用使用了模版类的方法时,也是用尖括号指定模版类的具体实现类。

以上就是C++泛型函数及模版类的基本使用方法。

泛型编程广泛的应用于STL标准模版库中,深入学习STL,当然要掌握好泛型编程。

				
时间: 2024-08-09 02:56:34

C++泛型函数及模版类的相关文章

浅显易懂的单模版类——————(与函数模版的区别)

模版类是抽象的,必须进行具体类型,而函数模版则不一定 #include<iostream> #include<string> using namespace std; template < typename T>//定义模版不能加分号 class A { public: A(T a) { this->a = a; } T &get() { return a; } private: T a; }; int main() { A<int> a1(1

泛型模版类出现了LNK2019: 无法解析的外部符号错误

我们在写程序的大部分时间都不会去考虑在已有的知识上出现的匮乏,前两天用C++写了一个顺序表,结果却不尽人意,这个或许是因为人生就是这样,在你已知的知识当中出现的知识漏洞你会很难发现,这里还是感谢一下syc大哥,每次在VC驿站上发帖子,他都给我回复了,也就是syc让我更加的喜欢VC驿站. 行了,谈谈出现的错误 这里是我之前出错的代码 http://www.cctry.com/thread-256893-1-1.html 这里我放上了我成功后的代码 SeqList.h #include<iostre

【C++】模版类实现普通类静态顺序表

在C或C++里,我们已经学会了如何实现一个静态顺序表了,那为何还要引入模版类来实现静态顺序表呢?首先,我们看,在未引入模版前,我们在C++里是这样定义一个静态顺序表的: typedef int DataType;    //此时我定义的是int型 class SeqList {     DataType* _array;     size_t _size;     size_t _capacity; } 我们若要定义char型或者其他类型的,可以采用typedef了,这就是使用typedef的优

Swift泛型和泛型函数

泛型(generic)可以使我们在程序代码中定义一些可变的部分,在运行的时候指定.使用泛型可以最大限度地重用代码.保护类型的安全以及提高性能.在Swift集合类中,已经采用了泛型.一.一个问题的思考怎样定义一个函数来判断两个参数是否相等呢?如果参数是Int类型,则函数定义如下:func isEqualsInt(a:Int, b:Int) -> Bool {    return (a == b)}这个函数参数列表是两个Int类型,它只能比较两个Int类型参数是否相等.如果我们想比较两个Double

黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 2.泛型技术是给编译器使用的技术,用于编译时期,确保类型的安全. 3.泛型的擦除:运行时,会将泛型去掉,生成class文件中的是不带泛型的,这个称为“泛型的擦除”.擦除泛型的原因是为了兼容运行时的类加载器. 4.泛型的好处:(1)将运行时期出现的问题ClassCastException,转移到了编译时期.方便于程序员解决问题,让运行时期问题减少.安全.(2)避免了强制转换的麻烦. 5.泛

C++笔记(7):泛型编程和模板(函数模板和类模板)

泛型编程和模板 0.泛型编程 1.函数模板 2.类模板 ----------------------------------------------------------------------------------------------------------- 0.泛型编程 所谓泛型就是以独立于任何特定类型的方式编写代码.前面介绍的标准库的容器.迭代器和算法都是泛型编程的具体应用. 模板是泛型编程的基础.使用模板的时候不需要知道模板是如何定义的,但今天我们来介绍如何定义自己的模板类和模

第42讲:Scala中泛型类、泛型函数、泛型在Spark中的广泛应用

今天来了解下scala的泛型 先让我们看下这段代码 class Triple[F,S,T](val first:F,val second: S,val third: T) val triple = new Triple("Spark",3,3.1415)        val bigData = new Triple[String,String,Char]("Spark","Hadoop",'R')        def getData[T](l

Java泛型函数的运行时类型检查的问题

在一个数据持久化处理中定义了数据保存和读取的 泛型函数的,但是在运行时出现类型转换错误,类型不匹配,出错的位置不是load方法,而是在调用load方法之后,得到了列表数据,对列表数据进行使用时出现的.结果列表里面的元素实际是A类型,调用load方法传递的是B类型的class,但是仍然load成功. 很是疑惑,最终修改代码调试后,解决问题. import android.content.Context; import android.text.TextUtils; import java.io.F

定义模板——函数模板和类模板

面向对象编程(OOP)和泛型编程都能处理在编写程序时不知道类型的情况.不同之处在于:OOP能处理类型在程序运行之前都未知的情况:而在泛型编程中,在编译时就能获知类型了. 前面介绍的容器.迭代器和算法都是泛型编程的例子.当我们编写一个泛型程序时,是独立与任何特定类型来编写代码的.当使用一个泛型程序时,我们提供类型或值,程序实例可在其上运行. 模板是泛型编程的基础.一个模板就是一个创建类或函数的蓝图或者说公式.当使用一个vector这样的泛型类型,或者find这样的泛型函数时,我们提供足够的信息,将