- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为什么需要STL
容器、迭代器和通用算法是三位一体的概念,下面我们以向量类模板Vector为例[1],具体阐述它们的必要性。
template<class T>
class Vector
{
private:
T *data; //数组指针
int theSize; //数据元素个数
int theMax; //数组长度,即容量
void Error(const char* cs)const {cout<<cs<<endl; exit(1);} //错误信息报告
public:
explicit Vector(int n=0):theSize(0), theMax(n+SPARE_MAX)
{if(theMax>0) data=new T[theMax];}
Vector(const Vector v):data(NULL), theMax(0){operator=(v);}//拷贝构造函数
~Vector(void){delete[]data;}
Vector operator=(const Vector<T> v); //复制赋值函数
T operator[](int id){return(data[id]);} //下标运算符函数
const T operator[](int index)const{return(data[id]);}//常量型下标运算符函数
bool Empty(void)const{return(theSize==0);} //判空
int Size(void)const{return(theSize);} //求数据个数
int Max(void)const{return(theMax);} //求数组容量
void Push_back(const T item);//尾插
void Pop_back(void); //尾删
const T Back(void)const;//返回尾元素的引用
const T Front(void)const;//返回起始元素的引用
void Reserve(int newMax); //扩大数组容量为newtheMax,保留原来数据
void Resize(int newSize,const T item=T());//把数据个数扩大为newtheSize,原数据保留,
//其余的值初始化为item
enum{SPARE_MAX=16};//枚举常量表示数组最小长度
};
1容器、迭代器和通用算法
向量类模板是一种容器类。容器类的对象包含一组元素,这组元素又同是一种类的对象。容器类的对象称为容器。我们学过的数组、基本顺序表都是容器类。一个整型数组和一个字符型数组,是数组容器类的两个对象,即两个容器,它们的元素类型分别是整型和字符型,因此也称为整型数组容器和字符型数组容器。容器中的元素依然可以是容器,例如基本顺序表数组,其中每一个数组元素都是基本顺序表容器。以后我们主要讨论类模板形式的容器类,例如向量类模板。
Vector<char> charV;//字符型Vector容器charV
Vector<Vector<char> > char_V;//Vector容器char_V的元素是字符型Vector容器
一般我们把非容器类型称为数值类型。整型、实型、字符型、Date类型、String都是数值类型。String之所以不是容器类,是因为它的任何对象所包含的一组元素只能是字符型,不能是其他类型。
有一些算法对每一种容器都是需要的,称为通用算法。例如,输出容器中的每一个元素,增加容器中的每一个元素的值,查找容器中最大的元素。假定给出一组数值类型、一组容器类型和一组建立在容器上的通用算法,那么用目前传统的C++方法开发,软件的数量将有多少呢?举例说明:
template<class T>
void Display(const Vector<T> c);//输出向量的元素
从现在看,容器类有多少,Display算法就有多少。可是问题还不只这样简单,如果算法是增加容器中的每一个元素的值,那么下面的通用函数就是错误的:
template<class T>
void Add(Vector<T> c,const T val)//容器中每一个元素值增加val。非法!
为什么呢?一方面,假设给双浮点型容器的元素增加一个整型值,这时,c是Vector<double>型对象,va
您可能关注的文档
最近下载
- 成人住院患者跌倒风险评估及预防(1)PPT课件.pptx VIP
- 第7课 实践出真知-【中职专用】2024年中职思想政治《哲学与人生》金牌课件(高教版2023·基础模块).pptx VIP
- 老年人日间照料中心评估机制.docx VIP
- 2024年云南省红河哈尼族彝族自治州选调生考试(公共基础知识)综合能力题库完整版.docx VIP
- 围手术期下肢深静脉血栓的术中护理.pptx VIP
- 基根-《全球营销(第8版)》英文教辅-第2章.pptx VIP
- 子宫内膜异位症诊治指南(第三版).pptx VIP
- 2025年山西省中考英语真题卷含答案解析.pdf VIP
- 桥梁工程全套质检评定资料表(已全部填写-含74个分表-1660个自动评定公式).xls VIP
- 共产党入党志愿书.doc VIP
文档评论(0)