C++模板编程和标准模板库(STL)

news2024/9/22 13:42:07

1、C++模板编程

1)函数模板

#include <iostream>
using namespace std;

// 声明一个泛型类型T,参数化数据类型
template <typename T>
// 定义一个函数模板
T man(T a, T b) {
	return (a>b?a:b);
}

int main()
{
	// 使用的时候没有指定参数类型,编译器会自动推导
   cout << "Hello World " << max(6, 2);
   return 0;
}

2)模板定义

template <typedef T>
// 使用class效果相同,
// 为了不和类的定义发生歧义,尽量使用typedef
template <class T>
// 也可以定义多个类型,但是定义了一定要用,否则报错
template <typedef T1, typedef T2>

3)函数模板调用

显示调用

max<int,int>(1, 2);

隐式调用(自动推导)

max(1, 2);

总结:模板的定义,相当于定义了一个占位符,这个占位符在编译时确定(理解为直接替换,类似宏定义),占位符的类型由参数来确定。
对于一个函数模板的调用(因为是调用的时候能确定参数类型),编译器会在编译时生成对应函数(模板函数)。

4)类模板

#include <iostream>
using namespace std;

// 声明一个泛型类型T,参数化数据类型
template <typename T1, typename T2>
// 定义一个类模板
class TempClass {
public:
	T1 key;
	T2 val;
public:
	TempClass(T1 k, T2 v){key=k;val=v;};
};

int main()
{
	// 定义一个模板类对象,指定泛型类型
	TempClass<int, int> test(5, 2);
	cout << test.key << " " <<test.val << endl;
	// 定义一个模板类对象,指定泛型类型
	TempClass<string, int> test2("123", 2);
	cout << test2.key << " " <<test2.val << endl;
   return 0;
}
}

总结:定义了模板之后,在随后定义的类内部如果使用了这个模板类型,那么这就是个类模板,编译器在检测到使用这个类模板实例化对象之后,会根据指定的参数类型得到模板类,该实例就是这个模板类的实例。
由类模板实例化得到的类叫模板类。

5)类内的函数模板

类内的函数模板只有在被调用的时候才会实例化,这点和函数模板特性一致。

#include <iostream>
using namespace std;

// 声明一个泛型类型T,参数化数据类型
template <typename T1, typename T2>
// 定义一个类模板
class TempClass {
public:
	T1 key;
	T2 val;
public:
	TempClass(T1 k, T2 v){key=k;val=v;};
	// 定义一个类内函数模板
	void PT(T2 a){cout << "PT " << a;};
};

int main()
{
	// 定义一个模板类对象,指定泛型类型
	TempClass<int, int> test(5, 2);
	test.PT(666);
   return 0;
}

注意:模板类型在对象定义的时候就确定了,调用类内模板函数的时候类型要一致。

C++函数模板的详细讲解
C++类模板(模板类)详解
在线测试代码


2、C++标准模板库

1、STL 是 C++ 标准库的一部分
2、STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。

1)容器

图片来源@软件技术爱好者,感谢
在这里插入图片描述

C++之STL(标准模板库)介绍


3、RAII机制

RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。

解决一般的问题,有些操作,比如,分配释放内存,加锁解锁等,需要成对出现,否则就会出现问题,内存泄漏,死锁等。
那么要保证操作的成对,需要在规则上实现,而不是靠用户去操作。

使用资源的一般过程,,
1、获取到资源
2、使用资源
3、释放资源

利用局部变量的自动申请和销毁的特性,结合累的构造和析构方法,实现成对操作的简便化处理。

具体操作如下:

#include <iostream>
using namespace std;

class Body {
	
public:
	Body(){cout << "申请资源(分配/加锁)" << endl;}
	~Body(){cout << "释放资源(释放/解锁)" << endl;}
	
	void useBody() {
		cout << "使用资源" << endl;
	}
};

int main()
{
	// 复杂易错的资源管理过程就能做成像使用局部变量那样简单
	Body body;
	body.useBody();
   return 0;
}

QT里面的 QMutexLocker 加锁貌似就是这种思想的体现。

详解C++11 RAII机制

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

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

相关文章

matlab中类的分别之handle类和value类——matlab无法修改类属性值的可能原因

写在之前&#xff08;吐槽&#xff09; 最近由于变化了一些工作方向&#xff0c;开始需要使用matlab进行开发&#xff0c;哎哟喂&#xff0c;matlab使用的我想吐&#xff0c;那个matlab编辑器又没代码提示&#xff0c;又没彩色&#xff0c;我只好用vscode进行代码编辑&#xf…

查询和下载国自然科学基金

查询和下载国自然科学基金 打开网站 能够查到基本信息、项目参与人、项目摘要、结题摘要、结题报告、成果统计、成果产出&#xff08;主要为论文&#xff09; 结题报告可以在线阅读。 下面的参考博文中有下载结题报告书的步骤&#xff0c;不过是收费软件。 参考博文 国自…

设备树与中断,操作系统如何使用中断

设备树中会对中断进行描述: 首先 cpu工程师会写好中断控制器的设备树节点, 里面会定义寄存器以及如何描述中断, gpio0209…中有两个属性, 一是gpio-controller 二是interrupt-cells。后者表示该设备是一个中断控制器。 interrupt-cells表示用两个属性描述中断。 之后再来看下…

PostGreSQL模式schema

问题引入 之前在做数据库设计时&#xff0c;经常会忽略schema模式&#xff0c;直接在数据库下的public模式下建立各类数据表。如果数据表命名不够规范&#xff0c;后期寻找某张表时就会比较麻烦。通过 所幸&#xff0c;PostgreSQL 的模式schema管理&#xff0c;可以对这个问题…

吴恩达《机器学习》2-1:模型描述

一、单变量线性回归 单变量线性回归是监督学习中的一种算法&#xff0c;通常用于解决回归问题。在单变量线性回归中&#xff0c;我们有一个训练数据集&#xff0c;其中包括一组输入特征&#xff08;通常表示为&#x1d465;&#xff09;和相应的输出目标&#xff08;通常表示为…

RabbitMQ消费者的可靠性

目录 一、消费者确认 二、失败重试机制 2.1、失败处理策略 三、业务幂等性 3.1、唯一消息ID 3.2、业务判断 3.3、兜底方案 一、消费者确认 RabbitMQ提供了消费者确认机制&#xff08;Consumer Acknowledgement&#xff09;。即&#xff1a;当消费者处理消息结束后&#x…

如何学好机器学习?机器学习一定需要下面这几方面知识!

学好机器学习需要有一定的数学基础和计算机编程基础。总结一下&#xff0c;学机器学习需要下面这几方面知识&#xff1a; 数学基础&#xff1a;机器学习中很多方面都设计到了数学知识&#xff0c;较好的数学知识可以在理解和应用机器学习中发挥积极的作用&#xff0c;一般包括…

翻页电子杂志制作方法,看完有手就行

你还在使用传统的纸质杂志进行宣传推广嘛&#xff1f;不打算紧跟时代的发展&#xff0c;融入互联网制作在线翻页电子杂志嘛&#xff01;电子杂志具有成本低&#xff0c;易于传播&#xff0c;宣传速度快&#xff0c;推广范围大&#xff0c;而且制作电子杂志也很easy噢&#xff0…

支持Lrc2024 Boris FX Optics最新 for mac

Boris FX Optics是一款强大的图像处理软件&#xff0c;提供了各种专业级的特效和滤镜&#xff0c;用于增强和改善视频和图像的外观。该软件适用于照片编辑、摄影、视频制作等领域&#xff0c;具有广泛的应用范围。 Boris FX Optics功能包括但不限于以下几个方面&#xff1a; …

iOS iGameGuardian修改器检测方案

一直以来&#xff0c;iOS 系统的安全性、稳定性都是其与安卓竞争的主力卖点。这要归功于 iOS 系统独特的闭源生态&#xff0c;应用软件上架会经过严格审核与测试。所以&#xff0c;iOS端的作弊手段&#xff0c;总是在尝试绕过 App Store 的审查。 常见的 iOS 游戏作弊&#xf…

删除A文件夹中 AB文件夹共有的文件

import ospath r"Z:\Users\86152\Desktop\chui shen-sw" chui_shen os.listdir(path)# print(chui_shen) # print(len(chui_shen)) for i in chui_shen:os.remove(rZ:\Users\86152\Desktop\ce shen-sw/ i)A文件夹&#xff1a; B文件夹&#xff1a; 我这个情况是 A文…

十九、类型信息(2)

本章概要 Class 对象 类字面常量泛化的 Class 引用cast() 方法 Class 对象 要理解 RTTI 在 Java 中的工作原理&#xff0c;首先必须知道类型信息在运行时是如何表示的。这项工作是由称为 **Class**对象 的特殊对象完成的&#xff0c;它包含了与类有关的信息。实际上&#x…

STM32串口通信

数据通信的基础概念 在单片机的应用中&#xff0c;数据通信是必不可少的一部分&#xff0c;比如&#xff1a;单片机和上位机、单片机和外 围器件之间&#xff0c;它们都有数据通信的需求。由于设备之间的电气特性、传输速率、可靠性要求各 不相同&#xff0c;于是就有了各种通信…

基于布谷鸟算法的无人机航迹规划-附代码

基于布谷鸟算法的无人机航迹规划 文章目录 基于布谷鸟算法的无人机航迹规划1.布谷鸟搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用布谷鸟算法来优化无人机航迹规划。 1.布谷鸟…

[Python进阶] 消息框、弹窗:pymsgbox.alert

6.18 消息框、弹窗&#xff1a;pymsgbox.alert 作用&#xff1a; 显示带有文本和单个OK按钮的简单消息框。返回所单击按钮的文本。 参数&#xff1a; text “”, 消息框标题 title “”, 消息框内容 button pymsgbox.OK_TEXT, 消息框自带的按钮&#xff0c;默认为&#xff…

@TableField(fill = FieldFill.INSERT)这个注解的作用

TableField 是 MyBatis-Plus提供的一个注解&#xff0c;用于标注实体类的属性与数据库表的字段之间的映射关系。当你在一个实体类的属性上使用 TableField(fill FieldFill.INSERT) 注解时&#xff0c;你告诉 MyBatis-Plus 在插入记录时自动填充这个字段。 FieldFill.INSERT 是一…

Docker 网络管理及资源控制

目录 1 Docker 网络 1.1 Docker 网络实现原理 1.2 Docker 的网络模式 1.3 网络模式详解 1.3.1 host模式 1.3.2 container模式 1.3.3 none模式 1.3.4 bridge模式 1.3.5 自定义网络 1.4 创建自定义网络 2 资源控制 2.1 CPU 资源控制 2.2 对内存使用的限制 2.3 对磁盘…

如何在【逻辑回归】中优化控制正则化程度的超参数C

一.逻辑回归基本介绍 逻辑回归也称作logistic回归&#xff0c;是一种广义的线性回归分析模型&#xff0c;主要是用来解决二分类问题&#xff08;也可以解决多分类问题&#xff09;。通过训练集来训练模型&#xff0c;并在训练结束后对测试集进行分类。 通过激活函数&…

我该如何入门Python机器学习?

我是在研一的时候开始学习机器学习的。相对于题主来说&#xff0c;我更是一窍不通&#xff0c;Python都没有一点点基础。总结一下我在学习Python的过程&#xff0c;以及自己在学习机器学习过程中的用到的优质资源&#xff0c;也总结一下我的学习心得。 一、怎么学习Python&…

开放式耳机百元价位怎么选、公认最好的百元开放式耳机

开放式耳机采用挂耳式的佩戴方式&#xff0c;不需封闭耳道&#xff0c;这一创新设计允许我们欣赏音乐的同时保持对周围环境的感知&#xff0c;从而在户外运动、通勤或其他活动中提供更安全的体验。而且&#xff0c;在预算有限的情况下&#xff0c;我们可以在百元价位范围内找到…