C++模板

C++的模板使用:
转载博客:C++模板学习
在这一篇博客里很详细的说明的模板的使用,使用模板可以不用函数重载就传入各种类型的参数,大大节省的代码量,但有些点需要注意。
值得注意的地方:
1、使用模板创建结构体后,使用结构体声明、创建变量时必须指定所需的类型

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

template <typename T>
struct Node{
 	T data;
 	Node<T> *lchild;
	 Node<T> *rchild;
};
int main(){
 	Node<int> x;    //需要指定类型
 	x.data = 100;
 return 0;
}

在声明Node变量的时候指定了类型为<int> ,如果不指定类型将会报错

2、每次利用模板声明函数、结构体的时候,都需要声明模板

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

typedef int I;
template <class T>
struct SNode{
 	T data;
 	SNode<T> *next;
};

template <class T>
void visit(SNode<T> *p){
	 cout << p->data << endl;
}

template <class T>
void inistack(SNode<T> *&lst){
	 lst = NULL;
}

template <class T>
int isEmpty(SNode<T> lst){
 	if(lst->next == NULL)
 		 return 1;
	 else 
	 	return 0;
}

template <class T>
void push(SNode<T> *&lst, T x){
	 SNode<T> *p ;
 	p  = (SNode<T> *)malloc(sizeof(SNode<T>));
	 p->next = NULL;
	 p->data = x;
	 p->next = lst;
	 lst = p; 
}

template <class T>
int pop(SNode<T> *&lst, T &x){
 	SNode<T> *p;
 	if(lst == NULL)
 		 return 0;
	 p = lst;
 	\\cout << " pop: " << p->data <<endl;
 	x = p->data;
 	lst = p->next;
	 free(p);
 	return 1;
}/**/


 SNode<int> *sta;
	sta = (SNode<int>*)malloc(sizeof(SNode<int>));
	int x = 100;int a=10;
	int c ,m;
	push(sta, x);
 	visit(sta);
	push(sta, a);
 	visit(sta);
 	pop(sta,m);
 	visit(sta);
	pop(sta,c);
 	cout << "a: " << m << "   x: " << c << endl;
 /**/
 return 0;
}

笔者的本意是利用模板创建一个链栈,以及链栈的一些基本操作函数,结果有点弄巧成拙的意味,如此并不见得高效多少,但无意中发现每声明一个函数,都需要声明模板,否则将会报错。
错误代码示范:

template <class T>
struct SNode{
	 T data;
	 SNode<T> *next;
};

\\template <class T>
void visit(SNode<T> *p){
	 cout << p->data << endl;
}

这里系统将会报错

3、template不支持使用typedef

template <typename T>
typedef struct Node{
 	T data;
	 Node<T> *lchild;
	 Node<T> *rchild;
} ;

这样系统将报错,template declaration of “typedef”

总结:
使用模板在一定程度上可以大大节约代码量,但是有一些需要注意的点,这是笔者在使用时遇到的问题,如果有何错误或更好的解决方法,请大家指导

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值