C模板编程自定义创建vector及创建容器
includetpftypeutil。hincludetfttypelib。hautostreamtpf::stream();streamautonlstream。getconsoleout();newlinetemplatetypenameT,sizetNTistypetemplateparameter,NisnontypetemplateparametertemplatetypenameT,autoNvoidtakestaticarray(T(array)〔N〕)(Tarray)〔N〕isalvaluereferencetoaarrayoftypeTwitNelements{streamType:TpfGetTypeName(T)〔N〕ispassedasparameternl;streamarraynl;}templatetypenameT,sizetN1,sizetN2Tistypetemplateparameter,N1andN2arenontypetemplateparametertemplatetypenameT,autoN1,autoN2voidtakestaticarray(T(array)〔N1〕〔N2〕)twodimensionalstaticarray{streamType:TpfGetTypeName(T)〔N1〕〔N2〕ispassedasparameternl;streamarraynl;}voidteststaticarray(){intarray〔〕{1,2,3,4,5};takestaticarray(array);intarray2〔〕〔5〕{{1,2,3,4,5},{5,4,3,2,1}};takestaticarray(array2);}decayarraytopointertemplatetypenameT,sizetNautodecayarray(T(array)〔N〕){returnarray;}primaryclasstemplatetemplatetypenameTstructcontainerelementst{usingtypeT;usingelementtypeT;staticconstexprboolischaracterarrayfalse;staticconstexprsizetarraycount0;};templatesizetNstructcontainerelementstchar〔N〕nonreference{usingtypechar;usingelementtypestd::string;staticconstexprboolischaracterarraytrue;staticconstexprsizetarraycountN;};templatesizetNstructcontainerelementstwchart〔N〕nonreference{usingtypewchart;usingelementtypestd::wstring;staticconstexprboolischaracterarraytrue;staticconstexprsizetarraycountN;};getwhetherecharacterarraytemplatetypenameTconstexprautoischaracterarrayvcontainerelementsttft::removeconstreferencetT::ischaracterarray;getarraysizetemplatetypenameTconstexprautoarraycountvcontainerelementsttft::removeconstreferencetT::arraycount;defineelementtypetemplatetypenameTusingelementflatttypenamecontainerelementsttft::removeconstreferencetT::type;templatetypenameT,sizetNstructcontainerelementstT〔N〕{usingtypeT;usingelementtypestd::vectorT;};definecontainerelementtypetemplatetypenameTusingcontainerelementttypenamecontainerelementsttft::removeconstreferencetT::elementtype;createavectortemplatetypenameType,typename。。。Typesautomakevector(Typefirst,Types。。。args){determinewhethertypeargumentisanarrayifconstexpr(std::isarrayvtft::removeconstreferencetType){thisistoallowonlycharacterarraystaticassert(ischaracterarrayvType,shouldbecharacterarray);usingelementtcontainerelementtType;usingcontainertstd::vectorelementt;sizetsizearraycountvType;constautolastcharacterfirst〔size1〕;lastcharacterisNULLcharacterif(elementflattType{}lastcharacter)returncontainert{decayarray(first),decayarray(args)。。。};else{returncontainert{elementt{std::cbegin(first),std::cend(first)},elementt{std::cbegin(args),std::cend(args)}。。。};}}else{usingelementttft::removeconstreferencetType;returnstd::vectorelementt{std::forwardType(first),std::forwardTypes(args)。。。};}}创建一个容器templatetemplatetypename,typename。。。classCntrType,typenameType,typename。。。Typesautomakecontainer(Typefirst,Types。。。args){ifconstexpr(std::isarrayvtft::removeconstreferencetType){thisistoallowonlycharacteronlystaticassert(ischaracterarrayvType,shouldbecharacterarray);usingelementtcontainerelementtType;usingcontainertCntrTypeelementt;sizetsizearraycountvType;constautolastcharacterfirst〔size1〕;lastcharacterisNULLcharacterif(elementflattType{}lastcharacter)returncontainert{decayarray(first),decayarray(args)。。。};else{returncontainert{elementt{std::cbegin(first),std::cend(first)},elementt{std::cbegin(args),std::cend(args)}。。。};}}else{usingelementttft::removeconstreferencetType;returnCntrTypeelementt{std::forwardType(first),std::forwardTypes(args)。。。};}}templatetypenameTvoidprinttype(Targ){streamTypeofT:TpfGetTypeName(T),Typeofarg:TpfGetTypeCategory(decayarray(arg))nl;}voidsimpletip(){inta1;std::vectorintv1{1,2,3,4,5};autov2makevector(a,2,3,4,5,6,7,8,9,10);streamv1v1nl;streamv2v2nl;autov3makevector(123,tomaskim,han,saimei,shuang);streamv3v3nl;}voidsimpletipadvance(){inta1;std::vectorintv1{1,2,3,4,5};autov2makecontainerstd::vector(a,2,3,4,5,6,7,8,9,10);streamv1v1nl;streamv2v2nl;autov3makecontainerstd::deque(123,tomaskim,han,saimei,shuang);streamv3v3nl;}intmain(){teststaticarray();simpletip();simpletipadvance();return0;}
平均数教学反思在学完平均数这一内容后,我出示了一个开放题,取得了意想不到的好效果。我设计了一个表格,内容是三个同学三次的数学成绩:小明(第一次:63第二次84第三次90)小红(第一次:82第……
口语交际春天在哪里课堂教学设计教材分析《春天在哪里》是义务教育课程标准实验教科书语文(人教版)一年级下册语文园地一中的口语交际。针对本册教材以专题组织单元的编排方式,口语交际设计也是围绕此单元的主题多……
2019中考七年级ampnbspUnitampnbsp6amXX中考七年级unit6topic1复习学案unit6topic1实验中学一、学习目标:1、知识与技能:a:学习并掌握本话题生词:secondpe……
我的老师魏巍阅读训练答案我的老师魏巍(1)最使我难忘的,是我小学时候的女老师蔡老师。现在回想起来,她那时只有十八九岁,是一个温柔美丽的人。(2)她从来不打骂我们。仅仅有一次,她的教鞭好像要……
六年级下册科学教案精选六年级下册科学教案1:生态平衡教学目标过程与方法:能够通过收集资料,对目前的生态现象做出判断。能够参与讨论人类危害环境的行为。能够就破坏生态平衡进……
关于晏子使楚的语文文言文阅读题及答案晏子将使楚。楚王闻之,谓左右曰:晏婴,齐之习辞者也,今方来,吾欲辱之,何以也?左右对曰:为其来也,臣请缚一人过王而行。王曰,何为者也?对曰,齐人也。王曰,何坐?曰,坐盗。……
八年级地理的教学反思范文,转眼间开学已经半个多学期了。在这半个多学期中,我接触了新教材、新学生。有许多收获也有很多遗憾。现将半个学期的教学工作回顾如下:面对新课程改革的大环境,面对新教材,我感到……
怀疑与学问教学设计作为一名为他人授业解惑的教育工作者,时常需要准备好教学设计,借助教学设计可以让教学工作更加有效地进行。我们该怎么去写教学设计呢?下面是小编精心整理的怀疑与学问教学设计,希望能够……
八年级语文下册第一单元复习资料语文:第一单元复习资料(鄂教版八年级下)一、单元复习目标1了解每课的作者及相关的背景知识。2识记积累每课的生字、生词。3学会抓住重要的语句理解作品的主旨……
风娃娃的教学反思范文《风娃娃》是新课程语文第三册第四单元的第四篇课文。本单元教材是围绕怎样看问题,想问题。这个主题安排了一些给人启迪的成语和故事,让学生在阅读中识字,在阅读中感悟生活的哲理。……
公鸡和猫头鹰阅读答案公鸡和猫头鹰阅读答案,你找到资料了吗?那么,关于公鸡和猫头鹰阅读答案是怎么样的呢?以下就是小编整理的公鸡和猫头鹰阅读答案,一起来看看吧!篇一:公鸡和猫头鹰阅读答案黄昏的时……
有关周围的生物教案(一)导入新课:师:你见过小鸡的生长过程吗?你见过一个小小的婴儿会长大吗?你见过蝴蝶是怎样变化来的吗?你知道一粒种子是怎样长成植物的吗?这些都是小小的生命,生命是美妙的,……