文章目录
实验背景
STL的全称为Standard Template Library(标准模板库)。STL涉及到很多方面,包括但不限于容器,迭代器,算法和函数对象等。本次博客只介绍最直观的STL内容,涉及原理以及更深刻的概念内容还需自行寻找资料学习。
总结:
1.标准模板库(Standard Template Library,简称STL)定义了一套概念体系,为泛型程序设计提供了逻辑基础。
2.STL中的各个类模板、函数模板的参数都是用这个体系中的概念来规定的。
3.使用STL的模板时,类型参数既可以是C++标准库中已有的类型,也可以是自定义的类型——只要这些类型是所要求概念的模型。
1.容器
容器(container)是容纳、包含一组元素的对象,容器类库中包括了13种基本容器。这些容器可以分为两种基本类型:顺序容器(sequence container)和关联容器(associative container)。顺序容器将一组具有相同类型的元素以严格的线性形式组织起来。关联容器具有根据一组索引来快速提取元素的能力。根据元素的组织方式,关联容器可以分为有序和无序,其中有序容器中健(key)按顺序存储,无序容器则使用哈希函数组织元素。
2.迭代器
迭代器(iterator)提供了顺序访问容器中每个元素的方法。对迭代器可以使用“++”运算符来获得指向下一个元素的迭代器,可以使用“*”运算符访问一个迭代器所指向的元素。如果元素类型是类或结构体,还可以使用“->”运算符直接访问该元素的一个成员,有些迭代器还支持“–”运算符获得上一个元素的迭代器。指针也具备同样的特性,因此指针本身就是一种迭代器,迭代器是泛化的指针。
3.序列变换(取反,平方,立方)
h函数:
//取反
template <typename T>
T InvT(T a)
{
return -a;
}
//平方
template <typename T>
T SqrT(T a)
{
return a*a;
}
//立方
template <typename T>
T CubicT(T a)
{
return a*a*a;
}
//数组取反
template <typename T>
void transInvT(T a[],T b[],int num)
{
for(int i=0;i<num;i++)
{
b[i]=InvT(a[i]);
}
}
//数组平方
template <typename T>
void transSqrT(T a[],T b[],int num)
{
for(int i=0;i<num;i++)
{
b[i]=SqrT(a[i]);
}
}
//数组立方
template <typename T>
void transCubicT(T a[],T b[],int num)
{
for(int i=0;i<num;i++)
{
b[i]=CubicT(a[i]);
}
}
//输出函数,采用指针遍历输出
template <typename T>
void outputCont(string strName,ostream &os,T begin,T end)
{
os<<strName<<":";
for(;begin!=end;begin++)
{
os<<*begin<<"\t";
}
os<<endl;
}
main函数:
int main()
{
const int N=5;
int a[N]={
1,2,3,4,5};
int b[N];
outputCont("a",cout,a,a+N);
transInvT(a,b,N);
outputCont("InV a",cout,b,b+N);
transSqrT(a,b,N);
outputCont("Sqr a",cout,b,b+N);
transCubicT(a,b,N)