模板和STL【C++初阶】

news2024/11/23 1:56:29

目录

一、前言

二、函数模板  

 三、类模板

四、STL


 

一、前言

以前我们写swap函数时,对每一种类型的变量都要写一份swap函数,但是他们的格式都是一样的,未免有些麻烦

因此,我们今天学习的模板就可以针对广泛的类型而不是具体的类型,帮我们节省工作。

void Swap(int&left, int&right)
{ 
    int temp=left; 
    left=right; 
    right=temp;
}
void Swap(double&left, double&right)
{ 
    double temp=left; 
    left=right; 
    right=temp;
}
void Swap(char&left, char&right)
{ 
    char temp=left; 
    left=right; 
    right=temp;
}

二、函数模板  

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本

函数模板格式:

template<typename T1,typename T2,……,typename Tn>

typename 也可以写成class

template<typename T>
void Swap(T& left, T& right)
{
    T temp = left;
    left = right;
    right = temp;
}

原理: 

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是本来我们应该做的事情交给编译器。

在编译器编译阶段,编译器需要根据传入的形参类型来推演生成对应类型的函数以供调用

 实例化:

(1)隐式实例化

让编译器根据实参来推演模板参数的实际类型。

(2)显示实例化

在函数名后的<>中指定模板参数的实际类型。

如:

Swap<int>(a,b);

模板参数的匹配原则

(1)非模板函数可以和同名的函数模板同时存在,且该函数模板还可以实例化为这个非模板函数。

(2)对于非模板函数和同名函数模板,如果其他条件都相同,在调用时会优先调用模板函数。如果模板可以产生一个具有更好匹配的函数,那么将选择模板。

(3)模板函数不会自动类型转换,普通函数可以。

 三、类模板

定义格式:

template<class T1,class T2,……,class Tn>
class <类模板名>
{
    //类内成员定义
};

 

#include <iostream>
using namespace std;
template<class T>
class Vector
{
public:
	Vector(size_t capacity = 10)
		:_pData(new T[capacity])
		,_size(0)
		,_capacity(capacity)
	{}
	~Vector();
	//……
private:
	T* _pData;
	size_t _size;
	size_t _capacity;
};
template <class T>//类模板中函数放在类外进行定义时,需要加模板参数列表
Vector<T>::~Vector()
{
	if (_pData)
		delete[] _pData;
	_size = _capacity = 0;
}

 类模板的实例化:

类模板实例化需要在类模板名字后跟<>,再将实例化类型放在<>中即可,类模板不是真正的类,而实例化的结果才是真正的类。

Vector<int> s1;
Vector<double> s2;

四、STL

什么是STL(standard template libaray):

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

 

 

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

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

相关文章

chatgpt赋能Python-pythondir

Python dir命令&#xff1a;探索Python模块的秘密 如果你是一名Python开发者&#xff0c;那么你一定或多或少接触过dir这个命令。但是&#xff0c;你了解dir到底能做什么吗&#xff1f;这篇文章将会介绍dir命令的用途、用法以及一些有趣的技巧。 什么是dir命令 简单来说&…

chatgpt赋能Python-pythonfind

Python文件搜索工具Pythonfind 在开发过程中&#xff0c;文件搜索工具是一个非常重要的工具。在大型项目中&#xff0c;可能需要查找特定类型的文件或者在代码库中查找特定的代码块。 Pythonfind是一个非常强大和灵活的python文件搜索工具&#xff0c;可以帮助我们简化这个过程…

chatgpt赋能Python-pythonforelse

Python For Else 详解&#xff1a;用 Python 的人都应该了解的语法结构 在 Python 中&#xff0c;一个常见的语法结构是 for...else。这种语法结构让循环变得更加直接明了&#xff0c;也让代码更加易读和易懂。 什么是 Python For Else 在 Python 中&#xff0c;for...else …

第13章_约束

第13章_约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&#xff08;Data Integrity&#xff09;是指数据的精确性&#xff08;Accuracy&#xff09;和可靠性&#xff08;Reliability&#xff09;。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的…

chatgpt赋能Python-pythondataframe转置

Python Dataframe 转置 - 了解 Pandas 中 DataFrame 转置的用法 数据分析是现代业务中的一个关键课题。当您在数据分析中使用 Pandas 时&#xff0c;往往会遇到需要转置 DataFrame 的情况。本文中&#xff0c;我们将介绍如何使用 Python 的 Pandas 库中的 DataFrame 转置来实现…

chatgpt赋能Python-pythondoc

PythonDoc&#xff1a;了解Python的文档工具 什么是PythonDoc&#xff1f; PythonDoc是Python官方文档。它是Python编程语言的权威指南和参考资料&#xff0c;提供丰富而全面的信息&#xff0c;从基础语法到高级主题&#xff0c;都有许多实用和详细的文档说明。 PythonDoc的…

chatgpt赋能Python-pythonddos

PythonDDoS&#xff1a;了解一下这种利用Python语言的攻击方式 PythonDDoS&#xff08;Python分布式拒绝服务攻击&#xff09;是一种利用Python语言编写的DDoS攻击技术&#xff0c;它利用了Python的强大处理能力&#xff0c;可以构建高效的攻击工具&#xff0c;让攻击者能够轻…

SpringMVC学习总结(路由映射、参数传递、转发和重定向...)

目录 1. MVC简介 2. SpringMVC简介 3. 路由映射注解 3.1 RequestMapping 3.2 GetMapping与PostMapping 4. 接收前端传递参数 4.1 接收单/多个参数 4.2 接收对象 4.3 接收JSON对象 4.4 后端参数重命名/映射 4.5 设置参数必传/非必传 4.6 获取URL中的参数 4.7 获取文…

学生考勤信息管理系统

系列文章 任务36 学生考勤信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试操作页面bk.txt信息录入&#xff1a;加入新出勤的信息查…

chatgpt赋能Python-pythonget

PythonGet&#xff1a;一个优秀的Python包管理器 PythonGet是一个优秀的Python包管理器&#xff0c;它可以帮助Python工程师安装、管理和更新Python包。本文将在介绍PythonGet的基本用法的同时&#xff0c;探讨PythonGet在SEO优化中的应用。 PythonGet的简介 PythonGet是Pyt…

不用魔法,快速、手摸手上线Midjourney!【附源码】【示例】

首先来一波感谢&#xff1a; 感谢laf提供赞助&#xff0c;目前可以免费使用Midjourney进行开发和测试。 感谢白夜、米开朗基杨sealos.io的耐心解答&#xff0c;让我对laf有了更多的使用与了解。 什么是laf&#xff1f;来了解下。 文末有【示例】 开始 废话不多说&#xff0c;…

基于Freertos的ESP-IDF开发——7.WS2812B彩色灯循环

基于Freertos的ESP-IDF开发——7.WS2812B彩色灯循环 0. 前言1. WS2812B简介2. 完整代码3. 演示效果4. 其他FreeRtos文章 0. 前言 本节使用WS2812B实现彩灯循环 开发环境&#xff1a;ESP-IDF 4.3 操作系统&#xff1a;Windows10 专业版 开发板&#xff1a;自制的ESP32-WROOM-3…

【软考中级】软件设计师选择题题集(一)

海明校验码是在n个数据位之外增设k个校验位,从而形成一个k+n位的新的码字, 使新的码字的码距比较均匀地拉大。n与k的关系是(1)。 (1)A.2k - 1≥n + k  B.2n - 1≤ n + k   C.n = k  D.n-1≤k 【答案】A 【解析】 【答案】B A 【解析】 在采用结构化方法进行系统分析时,…

MySQL高级篇——索引失效的11种情况

导航&#xff1a; 【黑马Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 1. 索引优化思路 2. 索引失效的11种情况 2.0. 数据准备 2.1 要尽量满足全值匹配 2.2 要满足最佳左前缀法则 2.3 主键插…

详解Jetpack Compose中的Modifier修饰符

前言 本文将会介绍Jetpack Compose中的Modifier。在谷歌官方文档中它的描述是这么一句话&#xff1a;Modifier元素是一个有序、不可变的集合&#xff0c;它可以往Jetpack Compose UI元素中添加修饰或者各种行为。例如&#xff0c;背景、填充和单击事件监听器装饰或添加行为到文…

依次对数组中的元素进行逻辑非和异或判断numpy.logical_not()numpy.logical_xor()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 依次对数组中的元素进行逻辑非和异或判断 numpy.logical_not() numpy.logical_xor() [太阳]选择题 下列代码中np.logical_xor(A, B)输出的结果是&#xff1f; import numpy as np A [True, …

苹果新增了28个以AI为重点的职位,希望利用这种AI技术改变iPhone和iPad

&#x1f680; 苹果新增了28个以AI为重点的职位&#xff0c;希望利用这种AI技术改变iPhone和iPad 苹果公司限制了使用ChatGPT等外部AI工具&#xff0c;正在开发自主的生成式AI技术。 苹果此前新增了28个以AI为重点的职位&#xff0c;希望利用这种AI技术改变iPhone和iPad。 此…

IntelliJ 导出和导入配置文件

导出&#xff1a; File->Manage IDE Setting->Export Settings…->选择导出目录&#xff0c;可以得到一个 settings.zip 的文件 导入方法&#xff1a; File->Manage IDE Setting->Import Settings…->选择需要导入的文件即可&#xff0c;导入之后重启IDE。

13-2-CSS3-渐变色、2D转换、3D转换

一、渐变色 CSS渐变色&#xff08;Gradient&#xff09;是指在元素背景中使用两种或多种不同的颜色进行过渡&#xff0c;超过两个颜色可以形成更为细腻的渐变效果。常见的CSS渐变色有线性渐变和径向渐变。 1. 线性渐变&#xff1a;Linear Gradients 向下/向上/向左/向右/对角…

CyberLink的屏幕录制软件Screen Recorder Deluxe 4.3版本在win10系统的下载与安装配置教程

目录 前言一、Screen Recorder Deluxe安装二、使用配置总结 前言 Screen Recorder Deluxe是由CyberLink公司开发的一款高效的屏幕录制工具&#xff0c;该软件提供了全面而易于使用的功能&#xff0c;可以满足广泛的屏幕录制需求。 Screen Recorder Deluxe的一些主要特点&…