C++笔记------模版

模版-----是为了让代码更加通用,使代码不受数据类型的影响。减少代码冗余。模版将数据类型当作一个参数进行传递。包括函数模版和类模板。

函数模版:

//定义一个比较大小的函数模版
template<typename Type>  // 也可以写成 template <class Type>
Type Max(Type a,Type b)
{return a > b ? a : b;
}
int main()
{cout << Max(1,2) << endl;cout << Max('A', 'a') << endl;cout << Max(2.5,3.2) << endl;return 0;
}

  模版会根据传递的实参自动进行数据类型的推演,比如在Max(2.5,2.3)中,模版会根据2.5是double,2.3是double,模版会推导出Type是double类型,生成一个模版函数,使用double类型的比较函数。所以模版虽然方便,但是效率不高。

  比如,调用函数Max(1,2)时,编译器会先根据函数模版生成一个int类型的模版函数,然后在调用这个函数。

//模版函数
int
Max(int a, int b) {return a > b ? a : b }

  当出现实参类型不一致时,普通函数正常运行,模版会出现错误,如:

/*
template<typename Type> //会产生二义性 Type Max(Type a,Type b) {return a > b ? a : b; }
*/ int Max(int a,int b) //会自动进行隐式转换 {return a > b ? a : b; } int main() {cout << Max(1,2.3) << endl;
cout << Max(1,(int)2.3) << endl; //将2.3强制转换成int类型
cout << Max<int>(1,2.3) << endl; //指定调用int类型的模版函数 }

  也可以重新编写模版函数,如:

template<typename Type1, typename Type2>
Type2 Max(Type1 a,Type2 b)
{return a > b ? a : b;
}

如果是类对象进行比较,需要重载比较运算符。模版只负责比较,不管如何进行比较。

class Test
{int num;
public:Test(int b):num(b){}bool operator>(const Test & t){if (this->num > t.num)return true;else return false;}
};
template<typename Type1>
Type1 Max(Type1 a,Type1 b)
{return a > b ? a : b;
}
int main()
{Test t1(10);Test t2(9);Max(t1,t2);  //不能使用cout输出,因为没有提供<<运算符函数
}

类模板: 

  利用类模板简单实现线性链表。

   int a = int(); //将a初始化为0;
  模版类成员函数都是模版函数,不允许将类定义和实现分离

#include <iostream>
using namespace std;
//声明List类
template<typename Type>
class List; 
template
<typename Type> class ListNode { private:Type data;ListNode<Type> *next; public:friend class List<Type>; //将List类成为ListNode类的友元类,才能访问私有数据ListNode():data(Type()),next(NULL){} //零初始化:根据不同类型进行初始化。如,int a = int() //a被初始化为0。ListNode(Type d,ListNode<Type> *n = NULL):data(d),next(n){}~ListNode(){} };template<typename Type> class List { private:ListNode<Type> *first;ListNode<Type> *last;size_t size; public:List();~List();bool push_back(Type x); //尾部插入链表
//显示列表函数
void Show_list() const //模版类的成员函数可以在类内部定义{ListNode<Type> *p=first;while(p != NULL){cout << p->data;p = p->next;}} }; template<typename Type> //模版类的成员函数都是模版函数,所以必须写template<typename Type> List<Type>::List() //限定是List<Type>:: {first = last = new ListNode<Type>;last->next = NULL;size=0; } template<typename Type> List<Type>::~List() {ListNode<Type> *p=first;while(p != NULL){first = p->next;delete p; //在构造函数中使用new,则在析构函数中使用deletesize--;p=first;} } template<typename Type> bool List<Type>::push_back(Type x) {ListNode<Type> *s = new ListNode<Type>;if( s == NULL )return false;s->data = x;s->next = NULL;last->next = s;last = s;return true; } int main() {List<int> mylist;for(int i=1;i<10;i++){mylist.push_back(i);}mylist.Show_list();return 0; }

转载于:https://www.cnblogs.com/zhangzeze/p/8717968.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马Android全套视频无加密完整版

课程描述&#xff1a;java基础到javaweb开发&#xff0c;从基础入门到实战。安卓基础到实战。实体班近5个月的课程实录&#xff01;&#xff01;&#xff01;课程表&#xff1a;xml&dom_sax_dom4j编程tomcat与web程序结构与Http协议与HttpUrlConnectionjava web之servletja…

target runtime apache v7.0 not defined 的解决方法

在工作台目录下找到自己操作的项目的文件夹 /.settings/org.eclipse.wst.common.project.facet.core.xml 删掉 <runtime name"Apache Tomcat v7.0"/> 参考&#xff1a;https://jingyan.baidu.com/album/ce09321b479d102bfe858f66.html?picindex1转载于:https…

强大的CSS3动画库animate.css

今天要给大家介绍一款强大的CSS3动画库animate.css&#xff0c;animate.css定义了大概50多种动画形式&#xff0c;包括淡入淡出&#xff0c;文字飞入、左右摇摆动画等等。使用animate.css也非常简单&#xff0c;你可以给页面上的任意元素&#xff0c;特别是文字添加各种神奇的动…

有关系统环境变量的设置问题

不知道各位朋友有没有想过这样用的问题&#xff0c;我们在使用windows使用在cmd下运行Ping、Netstat等之类的命令时&#xff0c;为什么可以使用呢&#xff1f; 这些后面牵涉到哪些东西呢&#xff1f; 我们今天就来介绍下有关这方面的知识。我们现在以win8作为测试对象&#xff…

ThinkPHP系统流程

流程图&#xff1a; 参考网址&#xff1a;http://www.thinkphp.cn/topic/35803.html 1 用户URL请求2 调用应用入口文件&#xff08;通常是网站的index.php&#xff09;3 载入框架入口文件&#xff08;ThinkPHP.php&#xff09;4 记录初始运行时间和内存开销5 系统常量判断及定义…

@HTML

Html.TextBoxFor(model > model.ProCategoryNo, new { maxlength "30", readonly true })转载于:https://www.cnblogs.com/dekevin/p/4371794.html

linux下安装配置jdk(解压版)

在linux下登录oracle官网&#xff0c;下载解压版jdk 传送门系统默认下载到“下载”目录中创建要将该文件解压的文件夹&#xff1a;其中 -p 参数代表递归创建文件夹&#xff08;可以创建多级目录&#xff09; 进入到下载目录&#xff0c;将下载好的jdk解压到指定目录配置环境…

curl 学习

查看网站所用的web服务器信息&#xff0c;curl -I url #curl -I www.baidu.com转载于:https://www.cnblogs.com/amusic/p/5489378.html

Struts2的Action配置的各项默认值

1 如果没有为action指定class&#xff0c;默认是ActionSupport 2 如果没有为action指定method&#xff0c;默认执行action中的execute()方法 3 如果没有指定result的name属性&#xff0c;默认值为success 转载于:https://www.cnblogs.com/feifeicui/p/8728546.html

谈谈Angular关于$watch,$apply 以及 $digest的工作原理

这篇文章主要是面向那些刚开始学AngularJs和想要了解数据绑定&#xff08;data-binding&#xff09;是怎么工作的&#xff0c; 如果你已经熟悉如何使用angularjs了&#xff0c;我强烈建议你不用阅读了。 angularjs使用者想要知道data-binding是如何工作的&#xff0c;就会遇到很…

Tachyon更名为 Alluxio,并发布1.0版本

详细参考 http://www.alluxio.org/releases/alluxio-1-0-0-release.html http://geek.csdn.net/news/detail/57243 http://www.alluxio.org/ Alluxio介绍 Alluxio 1.0版本&#xff0c;作为世界上首款以内存为中心的虚拟分布式存储系统&#xff0c;它能够统一数据访问并成为连接…

[leetcode] N-Queens II

N-Queens II Follow up for N-Queens problem. Now, instead outputting board configurations, return the total number of distinct solutions. 1 class Solution2 {3 private:4 // 试探算法从最右边的列开始。5 void test(long row, long ld, long rd)6 {7 if (row …

php设计模式-工厂设计模式

概念&#xff1a; 工厂设计模式提供获取某个对象的新实例的一个接口&#xff0c;同时使调用代码避免确定实际实例化基类步骤。 很多高级模式都是依赖于工厂模式。 转载于:https://www.cnblogs.com/sjhsszl/p/8729217.html

一幅长文细学MongoDB(四)——索引

4 索引 文章目录4 索引4.1 概述4.2 索引类型4.3 索引创建4.3 删除索引4.4 查看索引执行计划4.5 涵盖的查询4.1 概述 说明&#xff1a;索引支持在MongoDB中高效地查询。如果没有索引&#xff0c;MongoDB必须执行全集合扫描&#xff0c;即扫描集合中的每个文档&#xff0c;以选择…

【转】Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]

Fresco简单的使用—SimpleDraweeView 百学须先立志—学前须知&#xff1a; 在我们平时加载图片(不管是下载还是加载本地图片…..)的时候&#xff0c;我们经常会遇到这样一个需求&#xff0c;那就是当图片正在加载时应该呈现正在加载时的图像&#xff0c;当图片加载失败时应该呈…

对象映射工具AutoMapper介绍

AutoMapper是用来解决对象之间映射转换的类库。对于我们开发人员来说&#xff0c;写对象之间互相转换的代码是一件极其浪费生命的事情&#xff0c;AutoMapper能够帮助我们节省不少时间。 一. AutoMapper解决了什么问题? 要问AutoMapper解决了什么问题&#xff1f; 难道不是对象…

MindSpore安装教程【简洁易懂】

1 官网 MindSpore官网&#xff1a;MindSpore安装指南 2 关注社区 3 下载 查看自己python版本&#xff1a;使用python -V查看自己python版本 进入官网选择相应配置&#xff1a; 验证是否安装成功&#xff1a;python -c "import mindspore;mindspore.run_check()"&a…

php文件操作基本使用方法

<?php/* $fpfopen("tmp.html","r");$strfread($fp,filesize("tmp.html"));$strstr_replace("{title}",新标题,$str);$strstr_replace("{content}",新内容,$str); fclose($fp); $handlefopen(new.html,w); fwrite($handl…

一幅长文细学Vue(十三)——组合式中的生命周期

13 组合式API&#xff08;四&#xff09; 摘要&#xff1a;每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤&#xff0c;比如设置好数据侦听&#xff0c;编译模板&#xff0c;挂载实例到 DOM&#xff0c;以及在数据改变时更新 DOM。在此过程中&#xff0c;它也会运行被…

NodeJs实现自定义分享功能,获取微信授权+用户信息

最近公司搞了个运营活动&#xff0c;入口放在了微信公众号里&#xff0c;好久没碰过微信了&#xff0c;刚拾起来瞬间感觉有点懵逼。。。。似乎把之前的坑又都重新踩了一遍&#xff0c;虽然过程曲折&#xff0c;不过好在顺利完成了&#xff0c;而且印象也更加深刻了&#xff0c;…