自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 pytest测试框架入门1

pytest是一个非常成熟的python的单元框架pytest可以和selenium,request,appinum结合实现web自动化,接口自动化,app自动化pytest可以实现测试用例的跳过以及returns失败用例的重试pytest可以和allure生成非常美观的测试报告pytest可以和jenkins持续集成pytest有很多非常强大的插件,并且这些插件能够实现很多的实用操作。

2022-11-29 13:07:13 702

原创 Git入门操作

Git简介Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证

2021-06-05 18:17:48 948 16

原创 腾讯CSIG、阿里(蚂蚁金服,支付宝,搜索引擎)、网易互娱、字节跳动面经

说在前面的话本人之前有面过腾讯天美工作室,奈何凉凉,有需要的朋友给传送门2021腾讯互娱天美工作室一面凉经后来又被腾讯CSIG捞了,可惜挂在了二面上,期间有阿里三个部门的面试,也都凉凉(没办法,自己太菜了),后来面试了网易互娱,一面也挂,现如今面试字节跳动,到了HR面,也就打算把之前的面试做一个总结,来激励自己。腾讯CSIG一面自我介绍项目经历,问我数据如何处理,前后端交互数据格式,服务器如何实现的等(这里问的不深)了解归并排序和插入排序吗?我就详细的说了这两种排序的区别和细节(很意外,没有

2021-04-14 17:20:18 5811 18

原创 动态规划——完全背包拓展问题

完全背包问题给定你一个固定的背包容量capacity,和两个数组weigth,value,分别表示下标为i的物品的重量和价值,每件物品有无数件,问你背包能够存放下物品的最大价值是多少?这与之前的01背包极其拓展问题问题有很打不通,01背包的物品是有限个,而完全背包问题的物品是无限个,因此,所推倒的状态转移方程不同。比如:物品 重量 价值 1 1 15 2 2 10 3 3 20如

2021-03-18 15:18:04 347

原创 动态规划(01背包问题的拓展)

01背包问题这个问题之前有讲到过,可以参考动态规划01背包问题此次主要讲述01背包问题下的拓展出来的一些问题。题目一、分割等和子集题目链接:leetcode416.分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1,

2021-03-15 14:23:18 920

原创 腾讯2021暑期C++天美工作室游戏开发实习面试题&面经

前段时间投了腾讯互娱群下的天美工作室,结果10分钟不到就收到了面试通知,约到四天后的晚上,我甚是期待,奈何这次面试给我上了一课,足足面试了我三个半小时多,而且还凉凉了,真是身心疲惫呀。首先面试一开始,面试官给我直接说我们先来作题,我心想怕是动态规划的题就凉凉,果然面试官给了我三道题,第一题就是动态规划,看了一眼果断进军第二题。第一题、获得目标数的总和给你一个非负的数组nums,和一个key值,你可以再nums中每两个数中间任意加入`-`或者`+`,使得其运算可以得到目标数key,请你返回能得到目标数

2021-03-14 17:48:39 8505 27

原创 C++智能指针以及自我实现

为什么需要智能指针我们知道,内存泄漏是一件非常严重的错误,这要求如果malloc内存就一定要有对应的free,new了内存也一定要有对应的delete。但是如果程序员忘记写上对应的释放空间的操作符或者函数,那么就会出现内存泄漏,或者程序员写上了,但是中间某个逻辑导致程序崩溃了,并没有走释放空间的语句,那么也会造成内存泄漏,因此,为了防止内存泄漏的发生,C++11中引入了智能指针来管理空间。内存泄漏什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存

2020-12-05 17:22:22 365

原创 C++异常处理机制

C语言传统处错误的方式终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误C 标准库中setjmp和longjmp组合。这个不是很常用,可以了解一下实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。鉴于上述的错误处理机制对程序员来说不是很友好,于是C++中就引入了异常处理机制。C++异常的概念异常是一

2020-12-03 11:47:12 393

原创 LINUX下的Socket网络编程TCP/IP

网络学习过linux后了解到,在linux系统下的网络编程很有意思,在此,先要说一下TCP/IP,它是一个面向连接且可靠的一组协议,并且是全双工(下文会讲述)通信。它的存在使得网络世界缤纷多彩。linux内核会提供一系列函数帮助我们完成网络编程。想要对网络编程有认识,首先要知道其建立连接,数据传送,断开连接等过程。我们知道目前从低向上公认有5层分别为:物理层,数据链路层,运输层,网络层,应用层。 这里主要讨论运输层即TCP层。三次握手(三路握手)我们知道,建立一个TCP连接需要经过三次握手的情形。

2020-11-29 18:05:18 515 1

原创 计算机网络概述(复习)

互联网之所以能够像用户提供许多服务,就是因为互联网具有两个重要的基本特点,即连通性和共享。国际标准化组织ISO于1977年提出了开放系统基本参考模型OSI/RM。我国于1994年正式接入互联网。在网络边缘的端系统通信通常可分为**(客户/服务器方式)C/S,(对等连接)P2P**。互联网可以划分为由**核心部分(由大量网络和来连接这些网络的路由器组成。这部分是为边缘部分提供服务的,提供连通性和交换)和边缘部分(由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信和..

2020-11-25 20:02:43 718

原创 经典动态规划——0/1背包问题(二维数组动规,一维数组动规实现)

题目描述有为N件物品,它们的重量w分别是w1,w2,…,wn,它们的价值v分别是v1,v2,…,vn,每件物品数量有且仅有一个,现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?输入描述:物品数量N=5件重量w分别是:2 2 6 5 4价值v分别是:6 3 5 4 6背包承重为M=10输出描述:背包内物品最大总和为15示例1输入5102 2 6 5 46 3 5 4 6输出15分析对于这类问题,动态规划是最佳的选择,每一次求出局部的最优解,便可以求出整体的最

2020-11-15 16:05:36 1529 2

原创 C++之lambda表达式的介绍

lambda表达式的引出如果我们想要对一组数据进行排序,则可以使用sort函数来排序,但是对于自定义类型调用此函数的时候,我们需要来自定义比较大小的逻辑,比如下面这个例子class A{public: A(int a = 0) :_a(a) {} //自己定义比较大小的逻辑函数 bool operator>(const A& a) const { return _a > a._a; } bool operator<(const A

2020-09-22 17:25:05 314

原创 C++11之右值以及右值引用

右值的介绍在引入右值之前,我们先来了解一下左值,左值在日常代码中非常常见,我们定义的变量大多数都是左值。简单理解就是,左值既可以出现在=的两边,或者是可以取地址的变量。比如:void testL(){ int a = 10;//a就是一个左值 int b = a;//b也是一个左值 //因为a,b是左值,所以可以取它门的地址 int *pa = &a; int *pb = &b;}那么与他对应起来的右值便是:只能出现在=的右边,或者不可以取地址这里并不是绝对的,但是可

2020-09-15 16:55:32 316

原创 基数排序

基数排序算法思想:给定的一组数据,想按照个位数开始排序,放入对应序号桶中,然后统一取出后,再按十位数大小继续放入对应的桶中……依次类推,直到全部数据有序。看一个例子:对数组56,78,12,248,103,89,34进行排序步骤:首先,按照每个数据的个位数进行排序得下图重新整理后得到arr为:12,2,103,34,56,78,48,89再按照十位数大小进行排序,得如下图整理后得到arr:2,103,12,34,48,56,78,89最后按照百位数进行排序得下图:最终得到有序数列2

2020-09-09 18:38:59 168

原创 常用的几类排序算法讲解(附各排序算法详细讲解链接)

插入排序&希尔排序插入排序基本思想:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。插入排序特点:元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定希尔排序基本思想::先选定一个整数,把待排序文件中所有记录分成个 组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,

2020-09-09 15:57:59 373 2

原创 归并排序

归并排序算法归并排序是将两个或两个以上的有序表组合成一个新的有序表。其基本思想是:先将N个数据看成N个长度为1的表,将相邻两个表合并,得到长度为2的N/2个有序表,进一步将相邻的表合并,得到长度为4的N/4个有序表,以此类推,直到所有数据合并成一个长度为N的有序表位置。每一次归并称为一趟。如下图归并排序特点:归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题时间复杂度:O(N*logN)空间复杂度:O(N)稳定性:稳定算法实现c++实现void

2020-09-09 15:27:22 424

原创 哈希结构介绍及实现(线性探测)——闭散列解决哈希冲突

哈希介绍顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经 过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O( logN),搜索的效率取决 于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过 某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函 数可以很快找到该元素。插入元素 :根据待插入元素的关键码,以此函

2020-09-07 11:26:45 676

原创 unordered系列关联式容及应用例题

在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 ,即最差情况下 需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次 数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器(unordered_map,unordered_set,unordered_multimap,unordered_multiset)这四个容器与红黑 树结构的关联式容器使用方式基本类似,只是其底层结构不同,主要对unord

2020-09-07 10:19:42 152 4

原创 并查集介绍及实现以及相关例题

并查集的原理和使用背景在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一 个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-find set)。比如:某个公司的新员工有10人(这里给他们编号0,1,2,3,4,5,6,7,8,9),其中4人(0,1,2,3)来自A城市,3人(4,5,6)来自B城市,3人(7,8,9)来自C城市,刚开始他们都不认识。当

2020-08-20 12:32:02 233

原创 位图的介绍及实现

位图的介绍在一般的查找中,通常想的是用数组或者STL中的容器存储数据,当查找某个数据是否存在的时候,可以通过一系列查找算法对容器内的数据进行查找。但是如果数据海量,上亿级甚至更高的时候,这样的方法就显得效率很低了,先不说数据是否超范围,单单循环遍历就需要很久,这给用户的体验是非常差的,所以,这里引进的位图的概念。我们知道,查找一个数据是否存在,它只有两种状态,存在或者不存在,所以可以联想到二进制中的0,1,也是两种状态,每一位不是1就是0,所以,我们可以通过每一个bit为的0,1这两种状态来表示某个数是否

2020-08-12 11:49:54 180

原创 红黑树(RBTree)的简单操作

红黑树介绍红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过 对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点)如下图为一颗红黑树比如17这个结点开始,

2020-08-11 14:13:04 340

原创 map介绍以及使用(c++)

map介绍map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的内容。键值 key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起, 为其取别名称为pair: typedef pair value_type;在内部,map中的元素总是按照键值key进行比较排序的。map中通过键值访问单个元素的速度通常

2020-08-05 10:49:13 1132

原创 set介绍以及使用(c++)

set简介set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素 不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。set的

2020-08-04 15:07:28 502

原创 关联式容器概念介绍

关联式容器我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这 些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容 器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。这样的结构通常叫做KV键值对,及和查字典一样,我通过拼音找到这个字,就可以看和这个字有关的信息。那

2020-08-04 14:33:37 1443

原创 平衡二叉树(AVLTree)的构造等——超详细

平衡二叉树概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当 于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之 差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:1.它的左右子树都是AVL

2020-07-28 12:41:55 2405 2

原创 二叉搜索树的实现超详细解说

二叉搜索树二叉搜索树是搜索树的一种,虽然效率相比于平衡二叉树以及红黑树和B+树的搜索效率低,但它是这几类搜索树的基础,所以,掌握二叉搜索树是必须的,首先,先看一下二叉排序树的样子每一个结点的左边都是小于它本身的值,右边都是大于它本身的值。这样,中序遍历一遍之后,就是一个有序数列。二叉搜索树的平均搜索效率是O(logn),当然也有最坏的情况,及单枝树,如果是单枝树搜索效率也就变成了O(n),所以,也就有了后面的平衡二叉树。结点创建结点创建如下template<class T,class K&

2020-07-27 11:42:51 163

原创 C++多态的实现原理,虚函数超级详解

多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优 先买票。再举个栗子: 最近为了争夺在线支付市场,支付宝年底经常会做诱人的扫红包-支付-给奖励金的活动。那么 大家想想为什么有人扫的红包又大又新鲜8块、10块…,而有人扫的红包都是1毛,5毛…。其实这背后也是 一个多态行为。支付宝首先会分析你的账户数据,比如你是新用户、比如你没有经常支付宝支付等等

2020-07-22 10:15:47 318 4

原创 C++继承,多继承,菱形继承等超详细讲解

继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。class A{public: A(int a) :_a(a) {} void print() { cout<<"i am son"<<endl; }privat

2020-07-20 11:11:24 570

原创 C++模板进阶,模板特化详细讲解

模板进一步介绍1. 非类型模板参数这里的模板参数,及出现在参数模板列表的位置template<class T,size_t n = 10>class a{public: //[]运算符重载 T& operator[](size_t index){return _array[index];}private: T _array[n];//定义一个T类型的数组 //n可以当作常量使用};注意:浮点数、类对象以及字符串是不允许作为非类型模板参数的。非类型的模板

2020-07-09 13:49:31 354

原创 优先级队列— priority_queue详细解说以及使用

priority_queue介绍之前所说的队列,是按照给的顺序逐一入队,而这里要说的优先级队列,底层实现是通过堆来实现的,优先级队列,顾名思义,在入队的时候,就会按照数据大小拍好序来入队,在默认情况下,优先级队列的实现是通过大堆来实现的。具体的概念如下:1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)。3. 优先队列被实现为容器适配器,容器适配器即将特定

2020-07-06 10:09:56 684

原创 C++容器—队列以及队列的自我实现

队列介绍队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端 提取元素。队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操 作: empty:检测队列是否为空size:返回队列中有效元素的个数front:返回队头元素的引用back:返回队尾元素的引用

2020-07-06 09:27:41 642

原创 C++容器—栈使用以及最小栈

容器栈栈的介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下 操作: empty:判空操作back:获取尾部元素操作push_back:尾部插入元素

2020-07-06 09:11:18 321

原创 C++list的自我实现

list实现#include <iostream>using namespace std;//List: 双向带头循环链表template < class T>struct ListNode{ T _value; ListNode<T>* _next; ListNode<T>* _prev; ListNode(const T& val = T()) :_value(val) , _next(nullptr) , _

2020-07-02 10:40:55 137

原创 C++STL的list使用详细讲解

list容器介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率 更好。与其他序列式容器相

2020-07-02 10:34:55 313

原创 C++中STL的vector自我实现(部分接口)详解

vector自我实现在库中的vector中,底层实现是由三个指针实现的,在这里我就用_start,_finish和_eos实现必要解释都在代码中加以注释//运用模板,以便vector中实现各种数据类型template <class T>class Vector//自我实现的Vector{public: //Vector的构造函数实现 Vector() //初始化列表 :_start(nullptr)//指向有效元素的第一个位置 , _finish(nullptr)//

2020-06-24 09:21:22 188

原创 C++中STL的vector的介绍及使用

vector的介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是 一个相对代价高的任务,因为每当一个新的元素加入到容

2020-06-14 16:49:50 209

原创 C++中的string的自我实现(常用接口)注释详细

String类自我实现函数的实现方式以及必要解释都在下述代码中注释class String{public: String()//无参构造 //初始化 :_str(new char[16]),//对_str开空间 _size(0),//初始有效字符为0个 _capacity(0)//树池容量为0 { _str[_size] = '\0';//给初始有效字符处置'\0 } String(const char* str)//带参构造 { _size =

2020-06-14 14:48:43 319

原创 C++中的string类介绍以及使用

string类的学习zo.1 C语言中的字符串C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,若使用不当则可能还会越界访问。标准库的string类1. 字符串是表示字符序列的类2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。3. string类是使用char(即作为它的字符类型

2020-06-11 11:13:10 142

原创 C++中的STL简介详细讲解

什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的版本1.原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意 运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使 用。 HP 版本–所有STL实现版本的始祖2.P. J. 版本由P. J.

2020-06-11 09:54:03 581

原创 C++初识模板以及模板编程

模板我们知道,如果要用一个交换函数,那么要交换int型的两个数,就需要写一个int类型的交换函数,如果交换char类型的两个字符,就需要写一个char类型的交换函数。这样会造成代码的复用率低,虽然函数重载可以实现,但是函数的复用率仍然很低,且如果一个出错,那可能所有重载都会出错,为了解决这一问题,C++中引入了模板这一概念。首先需要了解一下泛型编程的概念:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。函数模板函数模板:函数模板代表了一个函数家族,该函数模板与类型无关,在使

2020-06-10 11:58:01 202

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除