[C++入门篇]——C++STL

🐤模板简介

🀄️模板声明语法

在C++中,模板让程序员能够定义一种适用于不同对象的行为,这听起来有点儿像宏,但宏不是类型安全的,而模板是类型安全的>。

模板关键字以template开头接下来是参数列表

模板函数

template<typename T1,typename T2=T1>
bool TemplateFunction(const T1& param1,const T2& param2);

模板类

template <typename T1,typename T2=T1>
class MyTemplate
{
	private:
		T1 member1;
		T2 member2;
	public:
		T1 GetObj()
		{
			return member1;
		}
};

🀄️模板函数

下面来一个模板声明,返回两个参数中较大的一个

template <typename objType>
const objType& GetMax(const objType& value1,const objType& value2)
{
	if(value1>value2)
		return value1;
	else
		return value2;
}

下面是一个使用该模板的实例

int num1=45;
int num2=56;
int maxVal=GetMax<int>(num1,num2);
double db1=1.1;
double db2=1.001;
double maxVal=GetMax<double>(db1,db2);

调用函数时并非一定需要指定类型,因此也可以int maxVal=GetMax(num1,num2)>

但是对于模板类则必须要指定类型

🀄️模板类

模板类的出现方便我们随时更改创建对象的私有成员类型,比如int time,time可能是年,但如果我们想存秒就有可能超出int的范围,我们需要转为 longlong,因此我们可以使用模板类来解决这个问题,创建类的模板,并不具体指定成员类型

template<typename T>
class HoldVarTypeT
{
	private:
		T value;//此处用一个T来代替
}

🀄️声明包含多个函数参数的模板

同样的我们也可以声明包含多个参数的模板,多个参数之间用逗号隔开就行,如果要声明一个泛型类用于存储两个类型可能不同的对象。

template<typename T1,typename T2>
class HoldVarTypeT
{
	private:
		T1 value1;//此处用一个T来代替
		T2 value2;
		
		//构造函数省略
}


//创建对象时:
template <int,double> h1(1,1.43);//这里就可以指定不同类型的数

在编译器看来,仅当模板类使用的时候,其代码才存在,所以即使我们定义了一个模板类,只要我们不使用,编译器将忽略它,当我们实例化一个模板类的时候,就相当于命令编译器创建一个类

🀄️使用static_assert执行编译阶段检查

static_assert能够在不满足指定条件的时候禁止编译,例如static_assert(sizeof(T)!=sizeof(int),“NO int please”),如果他们相等就显示一条错误信息。

注意:

在任何情况下都应该使用模板而不是宏,因为模板是类型安全的,而宏不是类型安全的。

🐤标准模板库简介

模板的一个最重要而强大的应用是在标准模板库(STL)中。STL由一系列模板类和模板函数组成,分别包含泛型实用类和算法。

STL是一组模板类和函数,向程序员提供了:

  • 用于存储信息的容器
  • 用于访问容器存储的信息的迭代器
  • 用于操作容器内容的算法

🀄️STL容器

容器是用来干嘛的?

容器是用来存储数据的STL类,STL存储了两种类型的容器类:

  • 顺序容器
  • 关联容器

顺序容器

在此处我们只进行一下说明有什么

vector:操作和动态数组一样,只允许在末尾插入数据

deque:操作和动态数组类似,但是允许在开头插入和删除元素

list:与双向链表一样

forward_list:与单向链表一样

顺序容器具有插入速度快但查找速度相对较慢的特征

关联容器

关联容器按照指定的顺序存储数据,插入数据的速度慢,但是会加快查询速度

set:存储各不相同的值,在插入时进行排序,容器的复杂度为对数

unorderset:存储各不相同的值在插入时进行排序,容器的复杂度为常数

map:存储键值对,并根据唯一的键进行排序,复杂度为对数

unordermap:复杂度为对数

multiset:与set类似但是允许存储多个值相同的项

multi

🀄️STL算法

有关STL算法的使用实在太多了,这里就简单说几个常用的

find:在集合中查找值

reverse:翻转集合的排列顺序

当然如果你有足够的兴趣想去了解一下这些推荐这个网站:CPlusPlus

在这个网站上我经常用来查各种函数的用法,不要畏惧英文,仔细啃几遍就能看懂,不需要全篇都翻译,坚持一段时间就能看懂的。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值