首先,我们需要知道什么是STL。 STL统称为“标准模板库标准模板库”。 STL提供了六个组件,包括容器、算法、迭代器、仿射函数、适配器和空间适配器。 这些组件听起来很陌生,但我相信你学过c的基础。 接触过数据结构算法的人一定不太清楚吧。 其实就像彪强宝贝一样,只是名字不同。 例如如下所示。
容器:用于存储各种众所周知的数据结构的容器算法(看名字知道其含义,就是各种常用的算法(例如冒泡、排序算法等); 迭代器:这可以看作是一个指针,它扮演着水泥在容器和算法之间的作用; 伪函数:作为众所周知的函数,其作用可以是算法的战略适配器:修饰(容器)或)伪函数)或)迭代器)的接口所使用的空间配置器(分配器)空间的配置
STL大组件
其实对于一般的开发者来说,我们只需要关心这三个组件就足够了。 “集装箱、算法、迭代程序”。 这三者也分为以下几类。
一、容器:
直列式容器:直列式容器是指容器内的容器要素的位置由要素进入容器的时间和场所决定; 关联容器:关联容器是指容器已经有一定的规则,容器元素在容器中的位置由容器的规则决定。 (二)算法:
质变算法是指在运算中区间内的要素内容发生变更; 非定性算法:运算中区间内要素的内容不变(三)迭代器:
迭代器:例如,---可以访问下一个元素和上一个元素; 随机存取迭代器:例如可以跳过两个元素来存取元素; 因此,上述三者形成了“容器存储数据、提供迭代器、算法使用迭代器操作容器中的元素”的不可分割的关系。
下面,我举一个刚入学的人都很了解这个情况的代码的例子,说明STL是如何实现的。 我给你演示一下代码。 下面的代码类似。
# #包含iostream
单一名称空间固态硬盘;
//排列容器
模板类t
类数组
{
公共:
//保护本机指针,并为本机指针命名别名
类型t *迭代器;
马来亚() )
{
mCapacity=10;
mSize=10;
p=新容量;
for (英制=0; I容量; I ) )
{
p=I 1;
}
}
//提供迭代程序、起始位置的迭代程序
T* begin () ) )。
返回p;
}
//返回结束位置的迭代程序
t *结束()
返回广告;
}
私有:
T* p;
int容量;
int mSize;
(;
//算法
模板类t
voidprintarray(tbegin,t结束) )。
{
for (; 本!=结束; begin ) )
{
cout *begin ';
}
cout终端;
}
void测试() )
{
数组内数组;
//获取容器提供的开始位置迭代器
myarray int :迭代器begin=Arr.begin (;
//获取容器提供的结束位置迭代器
marray int :3360迭代器末端=arr.end (;
打印机(begin,结束);
}
int主() )
{
测试(;
系统(暂停);
返回退出_成功;
}以上只是给出了大致的代码示例,只要知道有这样的好东西就可以了。 如果代码有必须完美的地方,请先无视。 只是为了示威,请谅解。 如果有更好的优化建议,也可以留言互相讨论。 谢谢你。 当然,c的知识量很大,STL标准模板库有很多集装箱,大家都必须一一学习。 例如,常用的string容器、vector容器、deque容器、list容器、set/multiset容器、map/multimap容器等,虽然一句话看不懂,但具体还是需要的
总结: c那么,为什么要使用STL标准模板库写代码呢? 当然,我自己强烈建议使用更高包级别的基础组件,如string、vector等。 因为,大佬们写的模板库是很多使用场景,成熟的代码,没有使用更高效、更安全、更好的车轮。 为什么要独自重新制造车轮呢? 这些标准模板库主要也可以代替原始指针和动态数组,有助于提高代码的可读性和安全性。 可以消除大多数delete[]的使用场景,使代码更清晰。 另外,建议返回string、vector等类型。 代码简单,安全。 与string和vector一样,这种错误可以大大减少,而不是手动内存分配,也可以代替原始的指针和数组操作,而不是原始的内存管理机制。