C++ 标准模板库STL初理解

9 篇文章 0 订阅

定义

标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽说它主要表出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

简单来说就是将类型参数化,实现算法与类型的分离,编写针对类型更加抽象的函数和类

语法格式:

template //template<类型形式参数表> 泛型参数

void func(T t){

}

template<类型形式参数表> 类型参数列表可以有多个类型

template<typename T1,typename T2,…>

template 关键字

typename 关键字     ------   class

函数模板中的类型参数一般用于函数的形参列表,但也可以用于函数体中定义变量

函数模板中的类型参数一般作用于形参,那么如果在调用该函数时,

可以根据实参的类型进行类型推导,从而不需要指定模板类型

	注意,有的时候根据实参也不能推导出来,必须显示提供类型参数

如果函数模板类型作用于函数体中,在调用函数时只能显示传递类型进行实例化



所谓的函数模板其实好比一个类型,需要用具体的类型来实例化成函数(模板函数)

函数模板 用具体的类型实例化 模板函数

STL库和C++标准库关系:

在这里插入图片描述

STL 体系结构

在这里插入图片描述

C++为什么能够支持模板这种语法?

C++支持重载

函数模板根据类型实例化之后,生成了函数名相同,参数列表不同的重载函数	

调用函数模板: 函数模板要先根据类型实例化 产生具体的 模板函数

实际上调用的是 模板函数

函数模板: 是模板    类  需要实例化对象    这个对象 称为 模板函数

模板函数: 是函数    可以调用

函数名(实参列表);  //类型推导

函数名<类型参数>(实参列表);  //不能进行类型推导
#include <iostream>
#include <typeinfo>
using namespace std;

//函数模板
template<typename T>
void func(T t){
	cout << typeid(T).name() << endl;
}

/*
	func<int>(3)  把函数模板实例化产生 void func(int t){} 模板函数
void func(char t){}
void func(double t){}
*/

class A{
	
};

template<typename T,typename F>
void func(T t,F f){
	cout << typeid(T).name() << " " << typeid(F).name() << endl;
}

template<class T1,class T2,class T3>
void func(T1 t1,T2 t2,T3 t3){
	
}

template<typename T>
void bar(){
	T t;
	cout << typeid(t).name() << endl;
}


int main(){
	func<int>(3);
	func<double>(3.14);
	func<float>(3.14);
	func<char>(3);
	func<A>(A());	
	
	func(3);//可以根据实参进行类型推导
	func(A());
	func(3.14);

	bar<int>();//必须传递类型参数  不能进行类型推导

	return 0;	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HOVL_C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值