『壹』 c語言設計一個函數模板,題目見圖。2選一。要程序謝謝
#include <iostream>
using namespace std;
template<typename T>
T Mam(T *_itBegin, T *_itEnd)
{
T *_val = _itBegin;
for (T *_it = _itBegin; _it!=_itEnd; ++_it)
if(*_it > *_val)
_val = _it;
return (*_val);
}int main()
{
char pArray[] = "oasndflwerasdf";
cout<<Mam(pArray, pArray+sizeof(pArray)/sizeof(char))<<endl;
int pArray1[] = {7,8,9,1,3,4,7,65,58};
cout<<Mam(pArray1, pArray1+sizeof(pArray1)/sizeof(int))<<endl;
return 0;
}
『貳』 有用c語言編寫程序的模板嗎
有!先包含庫文件->變數,函數聲明,->main函數->結束!就這么簡單!
『叄』 C中的模板怎樣使用 最好給個例子~
看看這個吧
http://www.njcc.e.cn/njhysite/njhygao_js/xuebao/xuebao0402/zhjm.doc
其他的見
C語言中實現模板函數的方法
在C語言中實現模板函數的方法:
各種用C語言實現的模板可能在使用形式上有所不同。
現以一個求和函數Sum為例,用C++Template可寫如下:
template<classT,classR> RSum(constT*array,intn)
{
Rsum=0;
for(inti=0;i<n;++i)
sum+=i;
returnsum;
}
如果不是內置類型,該模板隱式地需要有RR::operator+=(T)運算符可用。
1. 使用函數指針作為Functor替換者
TypedefstructtagAddClass
{
Void(*add)(char*r1,constchar*r2);
IntelemSize;
Char sum[MAX_ELEM_SIZE];
}AddClass;
voidSum(AddClass*self,constchar*array,intn)
{
for(inti=0;i<n;++i)
self->add(self->sum,array+i*self->elemSize);
}
使用時:
…..
VoidAddInt(char*r1,constchar*r2)
{
*(long*)r1+=*(int*)r2;
}
AddClassaddClass={AddInt,2,0};
Intarray[100];
Read(array);
Sum(&addClass,array,100);
…..
2. 用宏作為Functor的替換者
#define GenSumFun(SumFunName,Add,RetType,ElemType) \
RetTypeSumFunName(constElemType*array,intn) \
{ \
RetTypesum=0; \
for(inti=0;i<n;++i) \
Add(sum,i); \
returnsum; \
}
使用時:
#defineAddInt(x,y) ((x)+=(y))
GenSumFun(SumInt,AddInt,long,int)
…..
Intarray[100];
Read(array);
Longsum=SumInt(array,100);
…..
3. 所有可替換參數均為宏
至少需要一個額外的文件(實現文件)為impsum.c
/*impsum.c*/
RetTypeFunName(constElemType*array,intn)
{
RetTypesum=0;
for(inti=0;i<n;++i)
Add(sum,i);
returnsum;
}
使用時:
#undef RetType
#undef FunName
#undef ElemType
#undef Add
#defineAddInt(x,y) ((x)+=(y))
#defineRetTypelong
#defineFunNameSumInt
#defineElemTypeint
#defineAdd AddInt
#includeimpsum.c
…..
Intarray[100];
Read(array);
Longsum=SumInt(array,100);
…..
4. 總結:
第一種方法,易於跟蹤調試,但是效率低下,適用於對可變函數(函數指針)的效率要求不高,但程序出錯的可能性較大(復雜),模板函數(Sum)本身很復雜,模板參數也比較復雜(add)的場合。
第二種方法,效率高,但很難跟蹤調試,在模板函數和模板參數本身都很復雜的時候更是如此。
第三種方法,是我最近幾天才想出的,我認為是最好的,在模板參數(Add)比較復雜時可以用函數(第二種也可以如此),簡單時可以用宏,並且,易於調試。在模板函數本身很復雜,而模板參數比較簡單時更為優越。但是,可能有點繁瑣。
一般情況下,沒有必要做如此勞心的工作,一切交給編譯器去做就行了。但是本人在開發一個文件系統時,由於是基於一種少見的平台,沒有可用的C++編譯器,有幾個函數,除了其中的類型不同(uint16和uint32),和幾個可參數化的宏不同,其它地方完全相同,而函數本身很復雜(兩百多行代碼)。Copy出幾個完全類似的函數副本,維護起來特別煩人。非常需要如此的編程模式,故此,分享出來,大家共同探討。
『肆』 C中實現模板
模版的功能,不能用C語言實現的!
這種功能,需要編譯器的支持。
如果你不是想重載的話,倒是可以實現的。
你最好把問題再簡化一下,我覺得我還不太理解你的意思。
『伍』 c語言如何實現字元串模板功能,比如輸入字元串httpd_access_%HOSNAME%.log,輸出httpd_access_rango.log。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstruct__TEMPLATE__{
charKEY_NAME[256];
charVALUE[256];
}TEMPLATE;
voidLoadTemplate(char*src,TEMPLATEtp[],intcbtp){
char*p=src;
char*t=NULL;
charbak[256]={0},*pb=bak;
inti;
while(*p){
if(*p=='%'){
if(t){
for(i=0;i<cbtp;i++){
if(strncmp(tp[i].KEY_NAME,t,p-t)==0){
strcat(pb,tp[i].VALUE);
pb+=strlen(tp[i].VALUE);
break;
}
}
t=NULL;
}elset=p+1;
}elseif(!t)*pb++=*p;
p++;
}
memmove(src,bak,256);
}
intmain()
{
TEMPLATEtp[3]={{"HOSTNAME","localhost"},{"USER","test"},{"DATE","20140725"}};
charstr[256]="httpd_access_%HOSTNAME%_%DATE%_%USER%.log";
LoadTemplate(str,tp,3);
printf("%s ",str);
return0;
}
『陸』 如何用visual studio 6.0 新建c語言模板
樓上顯然沒有用過VC++6.0
文件->新建->文件->C++ Source File
輸入源代碼,編譯。。。
『柒』 c語言,什麼是佔位符
什麼是佔位符?
顧名思義,佔位符就是先佔住一個固定的位置,等著你再往裡面添加內容的。它在幻燈片上表現為一個虛框,虛框內部往往有「單擊此處添加標題」之類的提示語,一旦滑鼠點擊之後,提示語會自動消失。當我們要創建自己的模板時,佔位符就顯得非常重要,它能起到規劃幻燈片結構的作用。
『捌』 在c語言中如何實現函數模板
各種用
C
語言實現的模板可能在使用形式上有所不同。現以一個求和函數
Sum
為例,用
C++
Template
可寫如下:
template
R
Sum(const
T
*array,
int
n)
{
R
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
sum
+=
i;
return
sum;
}
如果不是內置類型,該模板隱式地需要
有R
R::operator+=(T)運算符可用。
1.
使用函數指針作為
Functor
替換者
Typedef
struct
tagAddClass
{
Void
(*add)(char*
r1,
const
char*
r2);
Int
elemSize;
Char
sum[MAX_ELEM_SIZE];
}
AddClass;
void
Sum(AddClass*
self,
const
char*
array,
int
n)
{
for
(int
i
=
0
;
i
<
n
;
++i)
self->add(self->sum,
array
+
i*self->elemSize);
}
使用時:
Void
AddInt(char*
r1,
const
char*
r2)
{
*(long*)r1
+=
*(int*)r2;
}
AddClass
addClass
=
{AddInt,
2,
0
};
Int
array[100];
Read(array);
Sum(&addClass,
array,
100);
…..
2.
用宏作為Functor的替換者
#define
GenSumFun(SumFunName,
Add,
RetType,
ElemType)
RetType
SumFunName
(const
ElemType
*array,
int
n)
\
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用時:
#define
AddInt(x,
y)
((x)
+=
(y))
GenSumFun(SumInt,
AddInt,
long,
int)
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
…..
3.
所有可替換參數均為宏
至少需要一個額外的文件(實現文件)為
impsum.c
/*
impsum.c
*/
RetType
FunName(const
ElemType
*array,
int
n)
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用時:
#undef
RetType
#undef
FunName
#undef
ElemType
#undef
Add
#define
AddInt(x,
y)
((x)
+=
(y))
#define
RetType
long
#define
FunName
SumInt
#define
ElemType
int
#define
Add
AddInt
#include
impsum.c
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
4.
總結:
第一種方法,易於跟蹤調試,但是效率低下,適用於對可變函數(函數指針)的效率要求不高,但程序出錯的可能性較大(復雜),模板函數(Sum)本身很復雜,模板參數也比較復雜(add)的場合。
第二種方法,效率高,但很難跟蹤調試,在模板函數和模板參數本身都很復雜的時候更是如此。
第三種方法,是我最近幾天才想出的,我認為是最好的,在模板參數(Add)比較復雜時可以用函數(第二種也可以如此),簡單時可以用宏,並且,易於調試。在模板函數本身很復雜,而模板參數比較簡單時更為優越。但是,可能有點繁瑣。
『玖』 怎麼在vs2010中創建自己的模板,c語言文件
這才幾個字,打的很快的。實在不行復制粘貼即可
『拾』 c語言菜單模板
#include
#include
void function1(){
}
void function2(){
}
void function3(){
}
int main(int argc, char *argv[]){//主函數
char choice; //暫存選擇
while(true){
printf("-----------------主題-----------21/11/14 18:38\n\n");
printf("1:功能1\n2:功能2\n3:功能3\n4:退出\n請選擇操作:");
scanf("%c",&choice);
switch(choice){
case '1' : function1();break;
case '2' : function2();break;
case '3' : function3();break;
case '4' : return 0;break;
}
system("cls");
}
}