当前位置: 首页 > article >正文

C++模版初阶

目录

1.函数模版

1.写法与作用

2.推导实例化

3.显式实例化

2.类模版

3.typename


1.函数模版

1.写法与作用

template<class T>
T add(T a, T b)
{
	return a + b;
}

模版本质是为了适应指定类型,而不用写多个函数重载完成同一功能。

这个加法函数就可以适应int、double等类型的加法。

2.推导实例化

//推导实例化
int a = 0, b = 0;
double c = 3.0, d = 4.0;
int e = add(a, b);
double f = add(c, d);

在这里模版函数会识别实参的类型来推导那个T类型是什么类型。

3.显式实例化

//显式实例化
int a = 0, b = 0;
double c = 3.0, d = 4.0;

//指定T类型为int类型
int e = add<int>(a, b);
//指定T类型为double类型
double f = add<double>(c, d);

2.类模版

template<class T>
class Stack
{
public:
	//实现了可以用栈存储不同类型的数据的功能
	Stack(int n = 4)
		:_array(new T[n])
		,_size(0)
		,_capacity(n)
	{}

	~Stack()
	{
		delete[] _array;
		_array = nullptr;
		_size = _capacity = 0;
	}

	void Push(const T& x);

private:
	T* _array;
	size_t _capacity;
	size_t _size;
};


//声明与定义分离,需要指定类域与类模版
 template<class T>
void Stack<T>::Push(const T& x)//用引用减少拷贝构造,提高效率
{
	if (_size == _capacity)
	{
		T* tmp = new T[_capacity * 2];
		memcpy(tmp, _array, sizeof(T) * _size);
		delete[] _array;

		_array = tmp;
		_capacity *= 2;
	}

	_array[_size++] = x;
}


int main()
{
	// 类模板都是显示实例化
	Stack<int> st1; // int
	st1.Push(1);
	st1.Push(2);
	st1.Push(3);

	Stack<double> st2; // double
	st2.Push(1.1);
	st2.Push(1.1);
	st2.Push(1.1);

	Stack<double>* pst = new Stack<double>;
	//...
	delete pst;

	return 0;
}

3.typename


http://www.kler.cn/news/314916.html

相关文章:

  • claude,gpt,通义千问
  • Java面试篇基础部分-ReentrantLock详解(二)
  • 2024最新!!!iOS高级面试题,全!(二)
  • 深度学习对抗海洋赤潮危机!浙大GIS实验室提出ChloroFormer模型,可提前预警海洋藻类爆发
  • Vue3 中组件传递 + css 变量的组合
  • 深度学习03-神经网络01-什么是神经网络?
  • QT快速安装使用指南
  • OpenHarmony(鸿蒙南向开发)——小型系统芯片移植指南(二)
  • 安全热点问题
  • NCNN 源码(1)-模型加载-数据预处理-模型推理
  • MySQL深入原理
  • 【数学分析笔记】第3章第3节无穷小量与无穷大量的阶(2)
  • 国标GB28181视频融合监控汇聚平台的方案实现及场景应用
  • 机器学习和深度学习的区别:从基础到前沿
  • 35. 模型材质和几何体属性
  • Mapper核心配置文件
  • uniapp 整合 OpenLayer3
  • C++速通LeetCode中等第4题-三数之和
  • 本地快速部署一个简洁美观的个人Halo博客网站并发布公网远程访问
  • 20240918软考架构-------软考171-175答案解析
  • 数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)
  • Docker修改默认的存储路径
  • 分布式锁之 防误删(优化之UUID防误删)
  • go-orm接口原生到框架
  • 小明,谈谈你对Vue nextTick的理解
  • 面试题 02.07. 链表相交 双指针
  • Unity URP APK打包物体不渲染问题
  • Leetcode42. 接雨水
  • C#(.NET FrameWork库)逆向基础流程(纯小白教程)
  • ETCD学习使用