请问template 模板的概念和用处?散分中...

liumyong 2003-11-26 12:55:40
1、概念是什么(越详细越好)?
2、有什么用处(在什么场合下使用,又取到什么效果)?
3、如何使用(最优化的使用)?
4、和STL 又怎么结合使用。
5、能否结合一个好的实例讲解?
请各位不赐吝教。
...全文
105 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacierFish 2004-02-03
  • 打赏
  • 举报
回复
为什么我用template写的一个list和上面所列的基本相同,使用的时候,语法编译都通过,但连接时出错。在VC6.0下,连接出LNK2001错误
101monster 2003-12-10
  • 打赏
  • 举报
回复
呵呵,学习!

TO: mechgoukiteng(变态是一种生活态度)

请发一份《C++ Templates》给我,谢谢!

EMAIL: 101monster@163.com
cai114 2003-12-09
  • 打赏
  • 举报
回复
TO: mechgoukiteng(变态是一种生活态度)

请发一份《C++ Templates》给我,谢谢!

EMAIL: caissw@163.com
jeckyz 2003-12-09
  • 打赏
  • 举报
回复
TO: mechgoukiteng(变态是一种生活态度)

请发一份《C++ Templates》给我,谢谢!

EMAIL: ssz160@hotmail.com
glacierrr 2003-12-09
  • 打赏
  • 举报
回复
好啊
wenxinfly 2003-12-09
  • 打赏
  • 举报
回复
我的邮箱是zzxxliu@hotmail.com
lovezn0424 2003-12-02
  • 打赏
  • 举报
回复
template 的最大作用我觉得是类型的逻辑。市的类型可以不确定。在实践中再来配对。
其他的几个问题我觉得我楼上的回答得不错了
noirchloe 2003-12-01
  • 打赏
  • 举报
回复
我个人以为:

从代码的效果上看:
模板的作用在于对代码的生成
从代码的使用上看:
模板的作用在于对代码的选择
从代码的灵活上看:
模板的作用在于对接口的松散

从设计上来看:
模板的作用在于对事物的完全不确定的描述,但却可以有效的操作这些不确定的描述而不出现实际中的逻辑矛盾
mechgoukiteng 2003-12-01
  • 打赏
  • 举报
回复
我有《C++ Templates》,给邮箱把


不过个人认为不要走火入魔
abitz 2003-12-01
  • 打赏
  • 举报
回复
请提供邮箱,我这里有本《The C++ standard Library》(英文版)。
liumyong 2003-12-01
  • 打赏
  • 举报
回复
看了上面这么多解释,想看下书理解一下。
不知哪位能提供《The C++ standard Library》和《C++ Templates》电子书下载。
ywchen2000 2003-11-30
  • 打赏
  • 举报
回复
#include<iostream>
template<class T>
class node
{
private:
node<T> *next;
public:
T data;
node(void);
node(T data1,node<T> *p=NULL);
void insertafter(node<T> *p);
void deleteafter(void);
node<T>* nextnode(void);
};
template<class T>
node<T>::node(void)
{
next=NULL;
}
template<class T>
node<T>::node(T data1,node<T> *p)
{
data=data1;
next=p;
}
template<class T>
void node<T>::insertafter(node<T> *p)
{
p->next=next;
next=p;
}
template<class T>
void node<T>::deleteafter(void)
{
node<T> *temp;
temp=next;
next=temp->next;
delete temp;
}
template<class T>
node<T>* node<T>::nextnode(void)
{
return next;
}

list.h

=====================================

#include<iostream>
#include<stdlib.h>
#include"node.h"
template<class T>
class list
{
private:
node<T> *head,*newnode,*last,*currnode,*prenode;
public:
list(void);
node<T>* setnode(T data2,node<T>* p=NULL);
void createlist(T data2,node<T>* p=NULL);
void Insertlast(T p);
void deletedata(T d);
void print(void);
void deletelist(void);
void athead(void);
T Data(void);
node<T>* Next(void);
node<T>* Currnode(void);
};
template<class T>
list<T>::list(void)
{
head=NULL;
newnode=NULL;
last=NULL;
currnode=NULL;
prenode=NULL;
}
template<class T>
node<T>* list<T>::setnode(T data2,node<T>* p)
{
newnode=new node<T>(data2);
return newnode;
}
template<class T>
void list<T>::createlist(T data2,node<T>* p=NULL)
{
newnode=new node<T>(data2);
if(head==NULL)
{
head=newnode;
}
else
{
currnode=head;
while(currnode->nextnode()!=NULL)
{
currnode=currnode->nextnode();
}
currnode->insertafter(newnode);
currnode=newnode;
}
last=newnode;
}
template<class T>
void list<T>::Insertlast(T p)
{
newnode=new node<T>(p);
if(last->nextnode()==NULL)
{
last->insertafter(newnode);
}
else
{
cout<<"there are some error in last"<<endl;
exit(0);
}
}
template<class T>
void list<T>::deletedata(T d)
{
if(head==NULL)
{
cout<<"no data in the list"<<endl;
exit(0);
}
if(head->data==d)
{
head=head->nextnode();
}
else
{
currnode=head;
while(currnode!=NULL)
{
if(currnode->data!=d)
{
prenode=currnode;
currnode=currnode->nextnode();
}
else
{
prenode->deleteafter();
currnode=prenode->nextnode();
}
}
}
}
template<class T>
void list<T>::print(void)
{
currnode=head;
if(head==NULL)
{
cout<<"no data in list"<<endl;
exit(0);
}
while(currnode!=NULL)
{
cout<<currnode->data<<" ";
currnode=currnode->nextnode();
}
cout<<endl;
}
template<class T>
void list<T>::deletelist(void)
{
node<T> *temp;
if(head==NULL)
{
cout<<"no data in list"<<endl;
exit(0);
}
while(head!=NULL)
{
temp=head;
head=head->nextnode();
delete temp;
}
}
template<class T>
void list<T>::athead(void)
{
if(head!=NULL)
{
currnode=head;
}
else
{
cout<<"no data at head"<<endl;
exit(0);
}
}
template<class T>
T list<T>::Data(void)
{
if(currnode!=NULL)
{
return currnode->data;
}
}
template<class T>
node<T>* list<T>::Next(void)
{
if(currnode!=NULL)
{
currnode=currnode->nextnode();
return currnode;
}
else
{
return NULL;
}
}
template<class T>
node<T>* list<T>::Currnode(void)
{
return currnode;
}



================================================================
灌水-----无尽的任务。
liumyong 2003-11-28
  • 打赏
  • 举报
回复
大家这样交流可以学得更快一些,这就是去掉书上的糟粕。
模板的概念从词面的来理解,是一些有共性的事物组合在一块,形成一个样式。但感觉这样都可用类的继承和虚拟来实现,又何须模板(类模板)呢,还是不明白。
heguobaoceo 2003-11-27
  • 打赏
  • 举报
回复
模板可以对任何的数据类型进行同时处理
它分:函数模板和模板函数
类模板和模板类
定义形式:
template<类型参数> 返回类型 FunctionName(形式参数)
{ .... };
template<类型参数>class className
{ // class define;
}
template<类型参数>返回类型className<类名>::MemberfunctionName(形式参数)
{
//成员函数定义;
}
短歌如风 2003-11-26
  • 打赏
  • 举报
回复

既然称作“模板”,当然是用于根据指定的模式生成代码的语法。函数模板可以生成函数,类模板可以生成类,这一过程称作“实例化”。用途就是在你的很多代码只是处理的类型或常量不同其余基本相同时可以写成模板自动生成而不用复制代码,不但减少了工作量,更重要的是避免了修改代码时的“不完整更新”问题。至于“如何使用”则不是一个贴子能讲清楚的,而“最优使用”则见仁见智,没有定论。一般我在编程时不考虑设计模板,当第一次需要复制代码时再加入模板的设计;当使用模板的代码又需要有不同处理时再加入traits……

对于标准库的使用不需要对模板了解很多,建议仔细学习《The C++ standard Library》;如果想了解模板的设计,听说有一本《C++ Templates》不错,不过我还没看过。
winco 2003-11-26
  • 打赏
  • 举报
回复
模板分两种,
函数模板和类模板,它们都提供一种公用机制
用处?当然是希望提供共用又不愿意多写代码,而且,基本上这些标准模板提供的一些接口和操作函数都足够我们使用
如何使用,参看The C++ Standard Library,
怎么结合,想用就用吧。比如想要一个能动态增长的数组,又不愿意去写链表,那就用vector或者list或者……
abitz 2003-11-26
  • 打赏
  • 举报
回复
是太复杂了,找书看看吧,看屏幕多累
liumyong 2003-11-26
  • 打赏
  • 举报
回复
哎,这年头有分没人要,还是我问得问题太复杂了
我自己↑

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧