C++-模板

OOP习题(11) 一、判断题1、pair类模板的作用是将两个数据组成一个数据,用来表示一个二元组或一个元素对,两个数据可以是同一个类型也可以是不同的类型。T F解析:T。"Pair 类模板" 是一种用于将两个数据项组合成一个数据结构的模板。它通常被用来表示一个包含两个元素的有序对(或二元组),这两个元素可以是相同类型的,也可以是不同类型的。二、选择题1、现有声明:template则以下哪一个声明不可能正确。A.Test a;解析:A。我们所定义的Test。 阅读详情
/**//**********************************************************************
*  <模板>                                                                                              
*模板是一种参数化的类或函数,也就是类的形态或者函数的形态可以被参数改变.
**********************************************************************
*/


/**//**********************************************************************
*  <模板函数>  
*/
                                                                                             

 template 
<class T> T funname(para type)

/**//*自我理解:
*       如果要计算int型和float型数组的平均值,可以分别写int_average(int nVal,*int size)和
*float_average(int nVal,int size)两个函数,但其实它们里面的步骤是一*样的,只是数据类型
*不同,如果使用模板,就不需要这么麻烦了。
**********************************************************************
*/

//例1:
 template <class T> average(T *array,int size) 
 ...
{
  T sum 
= 0;
  
for(int i=0;i<size;i++)
   sum 
+= array[i];
  T avg 
= sum/size;
  
return avg;
 }
;
//"<class T>"告诉编译器"T"是函数使用的数据类型。

//提示:模板函数最好写在头文件中,但必须要写在main()前面

//例2:
 template <class T>
 T max(T x,T y) 
//传入的参数改必须是同类型的
 ...{
  
return (x>y)  ? x:y;
 }


 
void main()
 ...
{
  
double a = 50.235;
  
double b = 50.234;
  
double c = max(a,b);
  cout
<<"最大值="<<c<<endl;
 }


//函数模板经实例化所生成的具体函数叫"模板函数";
//例如例1,可以实例化成 average(int,int)、average(float,float)、average(char,char) 等等...
//每一个模板形参前必须有"class"关键字!
//在template语句与函数模板语句之间不允许有别的语句;


/**//**********************************************************************
*  <多类型模板函数>  
*
*       如上题数组,若数组中所有元素之和超过类型范围怎么办?可用多类型*函数模板解决 
**********************************************************************
*/

//例:
 template <class T1,class T2>
 T1 average(T1 
*array,T2,int size)//声明函数模板
 ...{
  T2 sum 
= 0;   
  
for(int i=0;i<size;i++)
   sum
+=array[i];
  
return(sum/i);
 }

 
void main()
 ...
{
  __int16 intArray[]
=...{10000,20000,30000}; // 范围 -32768 - 32767
  cout<<"整数平均值="<<::average(intArray,0,3)<<endl;
 }


/**//* 自我理解
    此例中,当T1接收了__int16 intArray[]后,它俨然就成了__int16型了,但要命的是,数组中的
数字相加后,会超界,so...再定义一个T2,用T2来接收相加后的的数据,T2会根据数据的大小来
确定自己的类型。 
*/



/**//**********************************************************************
*  <模板函数的重载>  
*       因为模板函数需要接收同类型的参数,要是参数类型不一致怎么办?可以使用函数重载.
**********************************************************************
*/

 template
<class T>

 T max(T x,T y) 
//传入的参数改必须是同类型的
 ...{
  
return (x>y) ? x:y ;
 }


 
int max(int x ,char y) //重载函数 max,一个整型参数,一个字符型参数
 ...{
  
return (x>y) ? x:y ;
 }


 
void main()
 ...
{
  
int a = 55;
//     int b = 66;
  char b = 'A'; //ASCII 码 65
  cout<<"最大值="<<max(a,b)<<endl;  //此处将调用重载函数
 }



/**//**********************************************************************
*  <类模板>  
**********************************************************************
*/

 
const int size = 10;
 template 
<class T>
 
class stack
 ...
{
  T stck[size]; 
//模板定义数组的数据类型
 public:
  
//若成员函数中使用了模板,则此函数需要在类体外定义!!!
  void push(T ch); //模板定义形参类型
  T pop(); //模板定义返回类型
 }
;

 template 
<class T>  //注意:在类体外实现成员函数时的写法!!!
 void stack<T>::push(T ob)
 ...
{
 }


 template 
<class T> //注意:在类体外实现成员函数时的写法!!!
 T stack<T>::pop()
 ...
{
  T a 
= 0;
  
return a;
 }

 
void main()
 ...
{
  stack
<int> a; //对象的定义
  
//stack<int> a,b;
  
//stack<double> b;
 }


/**//**********************************************************************
*  <多参数类模板>  
* template <class T,T t> 或者 template <class T,int size>
*      参数的名字在整个模板的作用域内都有效,类型参数可以作用作用域变量的类型,数值型
*参数可以参与计算,就像使用一个普通常数一样(例如 cout<<t<<endl;)
**********************************************************************
*/

 
//多参数模板
template <class T,int size> //第一个参数是类型,第二个参数是数值(必须是常量)
 class stack
 ...
{
    T stck[size];
    
public:
    
void push(T x);
    T pop();
    
void print()
    ...
{
        cout
<<size<<endl;
    }

 }
;

 template 
<class T,int size> //注意写法!!!
 void stack<T,size>::push(T x)
 ...
{
 }


 template 
<class T,int size>  //注意写法!!!
 T stack<T,size>::pop()
 ...
{
    T a 
= 0;
    
return a;
 }


 
void main()
 ...
{
    stack
<int,10> a1,a2; //合法,对象的定义

    
int x = 100;
    stack
<int,x> b1; //不合法,x必须是常量

    
const int y = 100;
    stack
<int,y> c1; //合法.

    a1.print();
 
//    stack<double,5> b1,b2; //对象的定义
 }



/**//**********************************************************************
*模板总结:
*      模板提供了代码复用.在使用模板时首先要实例化,即生成一个具体的函数或类.函数模
*板的实例化是隐式实现的,即由编译系统根据对具体模板函数(实例化后的函数)的调用来进
*行相应的实例化,而类模板的实例化是显示进行的,在创建对象时由程序指定.
*
*      以前我一直以为模板的方法全部都是隐含为inline(内联,就是函数体定义在类之外,提高
*函数的执行效率)的,其实并非如此(Thinking C++[2]中有提到模板的non-inline function).所以
*我们一般在后缀为 .i 或者 .inl的文件中完成模板类方法的实现.
*例: //in temp.h                         //in temp.inl  
*  template<class T>    template<class T>
*  class Temp       void Temp<class T>::print() 
*  {          {...}
*  public:
*   void print();
*  }
*  #include "temp.inl"
*
*语法检查
*     对模板语汇法的检查会被延迟到使用的时刻,而不像一般的类或函数在编译器读到时就
*检查,所以如果你定义了一个模板,且语法错误,但你却没有去用它,编译时不会报错.
*
*继承
*      模板类和普通的类一样,也可以有派生类.且它的基类和派生类既可以是模板类,也可以不
*是模板类.
* class Abase 
* {...};
* template<classT> 
* class A:public Abase
* {...};
**********************************************************************
*/

//模板小练习

template
<class T>
T sum(T x,T y)
{
    
return x+y;
}


void main()
{
    
int a = 100;
    
int b = 200;
    
int c = sum(a,b);
    cout
<<"总和="<<c<<endl;
}




template 
<class T1,class T2>
T1 average(T1 
*x,T2 y,int size)
{
    T2 sum 
= 0;
    
for(int i=0;i<size;i++)
    
{
        sum 
+= x[i];
    }

    
return sum / size;
}


void main()
{
    __int16 array[] 
= {20000,10000,15000};
    __int16 val 
= ::average(array,0,3);
    cout
<<"平均值="<<val<<endl;
}




template 
<class T,int size>
class stack
{
private:
    T size[
100];
public:
    
void push(T);
    T pop();
}
;

template 
<class T,int size>
void stack<T,size>::push(T ch)
{    
    cout
<<"in the push area"<<endl;
}


template 
<class T,int size>
T stack
<T,size>::pop()
{
    T a 
= 0;
    
return a;
}


void main()
{
    stack
<int,100> a;
    a.pop();
    a.push(
100);
}
 
研究:同样的C++模板在多个cpp里出现,编译器是否要重复生成? 2023年就要过去,马上要跨如2024年。祝大家在新的一年,有个好收成。一直以来不是很确定:同样的的模板,在各个cpp分别出现,编译器要实现几份?研究一下。 阅读详情

相关推荐

在VisualStudio添加CPP模板

创建一个模板项目:导出模板:自定义模板内容:重新导入模板: 重启 Visual Studio,您的模板将出现在新建项目的模板列表中。 方法 2:使用代码片段(Code Snippets) 打开代码片段管理器:添加自定义代码片段: 使用代码片段: 在 文件中,输入快捷键 ,然后按 键,注释模板将自动插入。 方法 3:直接修改默认模板 找到默认模板文件: 修改模板:保存并重启 Visual Studio:

PythonWHN的博客 1099

模板及异常(小题)

单选题: 2-1 现有声明: template class Test{...}; 则以下哪一个声明不可能正确。( A ) A.Test a; B.Test < int> a; C.Test < float> a; D.Test< Test < int> > a; 2-2 关于函数模板,描述错误的是。 ( A ) A.函数模板必须由程序员实例化为可执行的函数模板 B.函数模板的实例化由编译器实现 C.一个类定义中,只要有一个函数模板,则这个类是类模板 D..

Self-den1al的博客 3017

01 Aras Innovator二次开发实战:从IOM到AML的完整交互指南

本文详细介绍了Aras Innovator二次开发实战,从IOM到AML的完整交互指南。通过JavaScript和C#代码示例,展示了如何在客户端和服务端使用IOM进行开发,并深入解析AML语言的基础语法和调试技巧。文章还提供了文档管理和BOM管理等典型场景的实战案例,帮助开发者快速掌握Aras Innovator二次开发的核心技术。

wind6的博客 650

C++ template —— 模板基础(一)

原地址:https://www.cnblogs.com/yyxt/p/5085516.html  

qq_41660465的博客 798

【Shader】Unity批量更换Shader

在Unity开发中,因为渲染管线问题,经常会遇到需要大量更改shader的问题,本篇文章讲述批量更换Shader的工具。

憨辰 1465

国内9大Coding Plan平台实测:CI/CD延迟与开发者体验横评

代码托管平台不仅是Git仓库,更是现代研发流程的‘生产力基建’核心。其底层能力涵盖Git协议优化、CI/CD调度实时性、制品库并发吞吐及RBAC权限收敛效率等关键维度。尤其在团队规模扩张、日均提交激增、多环境高频部署场景下,Webhook延迟、CI排队耗时、制品上传卡顿等应用层性能指标,远比网络层ping值更能决定开发效能。本文基于真实微服务项目(32模块、8.7万行/仓)与三类极端负载(长尾构建、热区冲突、制品洪峰),对国内9个满足Coding Plan标准的平台开展端到端压测,聚焦CI/CD延迟与开发者

weixin_29281941的博客 367

C++ 第十次作业 模板&STL

判断题 1-1 可以通过下标随机访问向量vector中的元素。 T #include <iostream> #include <vector> using namespace std; int main () { vector <int> cv(5); cv[4] = 999; cout<<cv[4]; return 0; } 1-2 当向量对象的内存用完之后,就会产生越界错误。 F 1-3 ve.

apostle_lemon的博客 2631

一文读懂 CST 时/频域求解器

本文系统介绍了CST Studio Suite中的关键网格技术——六面体网格、四面体网格以及TLM求解器专用的八叉树非均匀网格技术。重点阐述了六面体网格的三项核心技术:理想边界拟合(PBA)技术可精确处理曲面边界,薄片技术(TST)能高效模拟薄层结构,自适应八叉树网格实现计算资源最优分配。同时详细对比了六面体网格与四面体网格的特点及适用场景,前者适用于系统级EMC/EMI分析等时域问题,后者擅长处理复杂曲面和异质材料的频域问题。

一只豌豆象的博客 463

C++ 模板基础谈[转]

作者:jadedrip 打算给公司的同事上课,以便推广 C++ 模板,写了以下教程。希望能看到各种意见,以便完善它。 C++ 模板基础谈 1. 什么是模板 模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。 我们知道,C++ 是一种“强类型”的语言,也就是说一个变量,编译器必须确切的知道它的类型,而模板就是构建在这个强类型语言基础...

weixin_30765319的博客 238

5G Multicast/Broadcast Services(MBS) (七) MBS广播DRX

当处于RRC_IDLE或RRC_INACTIVE或RRC_CONNECTED 状态时,如果为 G-RNTI 配置了broadcast DRX,则允许MAC entity使用broadcast DRX 操作不连续地监听此G-RNTI的PDCCH;此 G-RNTI 的 drx-onDurationTimerPTM 或 drx-InactivityTimerPTM 正在运行的时间,也就是。long DRX周期drx-LongCycle-PTM和drx-StartOffset-PTM定义DRX周期开始的子帧。

asd199086的博客 391

引入高分辨率特征层保持的YOLOv10小目标增强:从思路到完整实现

大概两个月前,我在做一个无人机航拍图像检测的项目,目标是识别图片里的小型车辆和行人。用的数据集是VisDrone,相信做小目标检测的朋友对这个数据集都不陌生。一开始我直接跑了官方YOLOv10的代码,结果在tiny vehicle这一类上mAP50只有可怜的0.312。那些小目标基本就是几个像素点,YOLOv10在三次下采样之后,这些小目标的特征几乎就消失不见了。 后来我折腾了大概三周,尝试了各种方法:改anchor、调loss权重、做数据增强、甚至考虑过换检测头。最后发现最有效的还是引入一个高分辨率特征

YOLO 49

【C++】模板进阶---cpp模板的深入探索

模板参数分类类型形参与非类型形参。 类型形参,即出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。

专注于前后端学习 1235

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(8).仿真场景创建与编辑

总结文件()包含了仿真过程中的总体统计信息,如车辆生成数、平均速度等。加载总结文件使用Python的提取关键信息通过以上步骤,可以使用SUMO及其相关工具和库创建和编辑交通仿真场景。无论是手动创建、使用工具转换现有数据,还是通过Python脚本自动生成,SUMO都提供了丰富的功能来满足不同需求。此外,Traci库允许在仿真过程中动态调整交通场景,从而实现更精细的控制和优化。最后,通过对输出文件的分析,可以评估仿真结果并进行进一步的改进。

kkchenjj的博客 1267

黑马C++笔记——模板(CPP)

C++模板的常见操作

感觉画质不如...原神的博客 987

Python 爬虫实战:共享单车数据采集全流程与市场洞察深度剖析

本文介绍了如何利用Python爬虫技术获取和分析共享单车运营数据。文章从项目背景出发,详细阐述了系统架构设计,包括数据抓取、清洗存储、分析和可视化模块。通过Scrapy、BeautifulSoup等工具实现数据采集,使用Pandas进行数据清洗,并借助Matplotlib进行可视化分析。实战部分展示了爬虫代码示例和城市分布、使用频率等分析案例。最终指出数据驱动分析有助于了解行业现状和市场趋势,未来可结合机器学习等方法进行深入洞察。该技术方案为共享单车行业研究提供了有效的数据支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2232

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++ 在.h文件中声明,在.cpp文件中定义 模板函数和模板类

C++ 需要模板函数的定义和声明要放在一起,这样才能根据调用需要选择编译具体的实例。如果我们需要多种实例,每个实例要编译一次,就需要编译多次。在模板函数实现妥当以后,当我们在其它文件中使用某些模板函数的时候,基本所有实例都会被重新编译。如果每次编译时间过长,势必会停滞我们的思维,拖长开发进度。所以在模板函数实现妥当以后,我们希望他只编译一次,在非当前模块被修改时,他也不会被重新编译。这篇博客就是介绍

Expressing Youself Using Code 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【C++】简单理解CPP模板

了解模板的概念,函数模板与类模板,以及它们的基础用法

DEXTERFUTIAN的博客 702

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

c++ 模板的实现位置讨论(.h cpp)

本文,仅针对模板函数的写的位置做讨论(记录)。          首先,c++的模板是要有调用,才会被编译的。  因为本身函数要被编译成具体的参数,函数名,返回值类型的一条函数记录(个人理解),记录在函数表中, 而模板本身就是一个泛型, 只有被调用的时候才会产生一个具体的函数记录。  比如        template Class TestC { Public:        

mincheat的专栏 1024

【CPP】CPP的模板(前篇)

模板是分割C和C++的重要的分水线,决定了C语言注定不能取代C++设计模板一般咱称作为泛型编程,泛型编程即通过数据类型编写代码,使得同一段代码能够不断复用,提高了代码的复用性模板一般分为函数模板类模板public:,_size(0),_capa(n){}~Stack()_size = 0;_capa = 0;"

2302_79981653的博客 1599

【CPP杂货篇】C++模板(超详细)

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时才被参数化,根据实参类型产生函数的特定类型版本。定义格式:class 类模板名// 类内成员定义模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2302_78684687的博客 861

RedPanda-CPP项目模板使用技巧:快速创建专业C/C++工程

RedPanda-CPP是一款基于Qt开发的轻量级C/C++集成开发环境(IDE),它提供了丰富的项目模板功能,帮助开发者快速搭建专业的C/C++工程。本文将详细介绍如何充分利用RedPanda-CPP的项目模板,提升开发效率,让你轻松创建规范的C/C++项目。 ## 为什么使用项目模板? 项目模板是RedPanda-CPP的核心功能之一,它能够: - 提供标准化的项目结构,确保代码组织一致性

gitblog_01423的博客 864

CPP模板编程

语法形式如下:多个参数用逗号分隔。template <typename t1,typename t2,...... > 返回值类型 函数名(参数列表){//函数体template <class t1,class t2,......> 返回值类型 函数名(参数列表){//函数体template关键字表示这是一个模板定义。typename T声明了一个类型参数T,表示函数可以接受任何类型作为此参数。模板定义中 <> 里的内容即模板参数列表,不能为空t1 : t2;

qq_59805046的博客 1137

【CPP】C++模板:初阶到进阶语法与实用编程示例

探索C++模板的深度与广度,《C++模板:初阶到进阶语法与实用编程示例》带您从基础语法起步,逐步深入到高级特性。本博客结合精炼的理论知识和丰富的代码实例,揭示模板编程的精髓,助您提升开发效率,优化代码结构。无论您是初学者还是资深开发者,都能在这里找到提升C++编程技能的宝贵资源。

BinaryWiker的博客 1380

cpp之模板

这里只针对模板对于一些数组或者类作为参数的情况,函数模板无法正确运行了;我们可以运用以前学过的运算符重载,不过那会显得非常麻烦,所以这里就有了函数模板的重载,即提供一个具体化的模板。如果是全局函数在类内实现友元函数那么直接实现就可以了,但是如果是在类外实现友元函数,我们需要提前让编译器知道全局函数的存在。,这和之前的默认函数参数规则是一样的,不过要注意的是如果我们全部使用了默认参数也要在调用时写上空列表即。不仅要告知编译器模板参数的存在,还要告知其不为普通函数的类外实现,而是函数模板的类外实现。

2303_80883523的博客 1508

c++详解模板泛型编程,详解类模板的实现为什么不能放在cpp文件

泛型编程是一种编程范式,它允许程序员编写与类型无关的代码,从而在编译期确定具体的类型。我们通过模板编写一个函数可以让编译器,自动生成对应类型的实现,这大大减少了重复代码的出现,还提高了代码的可维护性和可扩展性,很重要的一点是模板有特性。

z3363的博客 1066

Cpp-Templates-2ed完全指南:从C++11到C++20的终极模板编程教程

C++模板是C++11至C++20标准中最复杂也最强大的特性之一,是构建高性能基础设施库不可或缺的技术。本教程将带你从基础到进阶,全面掌握现代C++模板编程的核心技术与最佳实践。 ## 为什么模板是C++开发者的必备技能 🚀 模板作为C++的元编程基础,允许开发者编写与类型无关的通用代码,在保持类型安全的同时实现代码复用。无论是STL标准库、Boost库,还是现代C++基础设施,模板技术都扮

gitblog_00195的博客 683
上一篇: Windows-tree命令生成目录树
下一篇: C++-必知必会_赋值和初始化并不相同(条款12)
MasterFT
博客等级 码龄20年 48粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值