【STL】模板概念+STL介绍-创新互联
模板(Template)
当前名称:【STL】模板概念+STL介绍-创新互联
新闻来源:http://pwwzsj.com/article/dedcdj.html
- 模板就是C++实现代码重用机制的一种工具
- 它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。
- 可以使用模板来定义函数和类
当你定义一个如下函数,想要计算一个数的平方
创新互联公司专业为企业提供饶阳网站建设、饶阳做网站、饶阳网站设计、饶阳网站制作等企业网站建设、网页设计与制作、饶阳企业网站模板建站服务,10余年饶阳做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。int square(int x){return x*x;
}
可你想要函数也能对double类型的数进行平方,于是接着写
double square(double x){return x*x;
}
基于C++的函数重载,你如愿完成了这个功能
int main(){cout<
是不是觉得写了两个功能一模一样的函数,只是改变了形参类型,有点蠢?那让我们来看Template是怎么做的
template//函数模板
T square(T x){return x*x;
}
int main(){cout<(5)<(5.5)<
是不是很神奇?函数模板在这里仅仅是声明了一个求平方函数的描写叙述,还不是一个能够直接运行的函数。只有用实參的数据类型取代类型參数标识符T之后(实例化),才会产生真正的函数。同时函数模板在调用时能够自动鉴别实参的数据类型(隐式实例化),因此上方主函数里的cout<
cout<
下面再通过一个例子介绍类模板
template//类模板,也可定义为templateclass iVector{T arr[1000];
int size;
public:
BoVector():size(0){}
void push(T x){ arr[size]=x;size++;
}
void print() const { for(int i=0;i cout<
与函数模板类似,类模板不是一个类,而是一个模板,只有实例化后才会成为一个类,因此类模板需要这样来使用
int main(){//类模板必须要指明数据格式(实例化),即 iVectoriv,这一点与函数模板不同
iVectoriv;
iv.push(2);
iv.push(5);
iv.push(8);
iv.push(9);
iv.print();
return 0;
}
最后我们将函数模板和类模板结合起来使用,感受模板带来的便捷与效率
#includeusing namespace std;
template//函数模板
T square(T x){return x*x;
}
template//类模板
class iVector{T arr[1000];
int size;
public:
iVector():size(0){
}
void push(T x){ arr[size]=x;size++;
}
T get(int i) const { return arr[i];
}
int getsize()const{ return size;
}
void print() const { for(int i=0;i cout<iVectoroperator*(const iVector& rhs1,iVector& rhs2){//类模板的运算符重载
iVectorres;
for(int i=0;ires.push(rhs1.get(i)*rhs2.get(i));
}
return res;
}
int main(){iVectoriv;
iv.push(2);
iv.push(5);
iv.push(8);
iv.push(9);
cout<<"Print squared iv:"<
标准模板类STL(C++ Standard Template Library)介绍STL(Standard Template Library,标准模板类)是C++语言内置的一个基础模板集合,包含了各种常用的存储数据的模板类及相应的操作函数,你可以将STL理解为STL= Containers(存储数据的容器)+Algorithms(处理数据的算法)+Iterators(数据和算法的桥梁)
- 容器(container):用来管理某类对象的集合,容器可以是array、vector、tree、hash map、set等;
- 迭代器(iterator):用来在一个对象集合内遍历元素,这个对象集合或许是个容器,或许是容器的一部分。迭代器和寻常的指针类似,调用operator ++ 就累进,调用operator * 就访问被指向的元素值,你可以把迭代器视作一种智能指针,能够把”前进至下一元素“的意图转换为合适的操作;
- 算法(algorithm):用来处理集合内的元素,它们可以出于不同的目的而插入、删除、修改、查找、排序、使用元素,通过迭代器的协助,我们只需撰写一次算法,就可以将它应用于任意容器,因为所有容器的迭代器都提供一致的接口。
下面是一个调用STL的小栗子
#include#include#include
using namespace std;
int main()
{//container为vector
vectorvec;
//algorithm为push_back(从尾部添加元素)
vec.push_back(4);
vec.push_back(1);
vec.push_back(8);
//iterator为itr1,itr2,i
vector::iterator itr1=vec.begin();//[begin,end)
vector::iterator itr2=vec.end();
for(vector::iterator i=itr1;i!=itr2;++i){cout<<*i<<" ";
}
cout<::iterator i=itr1;i!=itr2;++i){cout<<*i<<" ";
}
return 0;
}
使用STL的理由- 代码重用,不需要重复造轮子
- 效率高(又快又节省资源)
- 准确,避免写出更多的 bug
- 代码简洁,可读性高
- 即标准化又保证可用性
有关STL的详细用法及介绍我会在后面的文章中持续更新,欢迎关注!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前名称:【STL】模板概念+STL介绍-创新互联
新闻来源:http://pwwzsj.com/article/dedcdj.html