《计算机网络原理》第7章-类模板与向量-精选课件.pptx
第七章类模板与向量第七章类模板与向量7.1类模板类模板复习内容复习内容:函数模板函数模板l3.5函数模板函数模板有些函数重载时参数个数相同有些函数重载时参数个数相同,只是类型只是类型不同不同,此时重载函数比较繁琐此时重载函数比较繁琐,可利用函可利用函数模板实现数模板实现.l3.5函数模板函数模板有些函数重载时参数个数相同有些函数重载时参数个数相同,只是类型只是类型不同不同,此时重载函数比较繁琐此时重载函数比较繁琐,可利用函可利用函数模板实现数模板实现.l3.5函数模板函数模板有些函数重载时参数个数相同有些函数重载时参数个数相同,只是类型只是类型不同不同,此时重载函数比较繁琐此时重载函数比较繁琐,可利用函可利用函数模板实现数模板实现.l3.5函数模板函数模板函数模板定义格式函数模板定义格式:定义函数模板后定义函数模板后,函数调用时根据函数参数来函数调用时根据函数参数来类型来确定调用哪个版本的函数类型来确定调用哪个版本的函数.函数执行时函数执行时确定参数类型的函数称为模板函数确定参数类型的函数称为模板函数.l3.5函数模板函数模板此种形式调用中此种形式调用中称为函数模板的参数称为函数模板的参数一般可省略一般可省略.Typename可替代可替代classl3.5函数模板函数模板若某函数参数类型不一致时若某函数参数类型不一致时,也可定义函数模也可定义函数模板板.7.1类模板类模板7.1.1类模板的基础知识类模板的基础知识templateclass 类名类名Private:/成员定义成员定义Protected:/成员定义成员定义Public:/成员定义成员定义7.1类模板类模板template class 类名类名 类模板的对象类模板的对象:类名类名 对象名对象名(参数参数);7.1类模板类模板类的成员函数定义类的成员函数定义(在类体外定义时在类体外定义时):模板类的成员函数定义形式模板类的成员函数定义形式:template template 返回值类型返回值类型 类名类名:函数名函数名(参数参数)/函数体函数体 普通类的成员函数定义形式普通类的成员函数定义形式:返回值类型返回值类型 类名类名:函数名函数名(参数参数)/函数体函数体 7.1类模板类模板7.1类模板类模板7.1.2类模板的派生与继承类模板的派生与继承7.1.2类模板的派生与继承类模板的派生与继承模板类继承普通类模板类继承普通类,模板类作普通类的派生类模板类作普通类的派生类继承后成员使用同一般类的继承继承后成员使用同一般类的继承.模板类派生模板类模板类派生模板类模板类使用时模板类使用时,须指出模板类参数须指出模板类参数7.2向量与泛型算法向量与泛型算法7.2.1定义向量列表定义向量列表向量是向量是C+中一维数组的类版本中一维数组的类版本用于存放多个相同类型的数据用于存放多个相同类型的数据.可动态指定向量中元素的个数可动态指定向量中元素的个数,并提供了多个成并提供了多个成员函数以方便数据使用员函数以方便数据使用,同时可使用泛型算法同时可使用泛型算法.是是C+中的类模板中的类模板.使用时加头文件使用时加头文件vector7.2向量与泛型算法向量与泛型算法7.2.1定义向量列表定义向量列表向量的声明形式向量的声明形式:vector 向量名向量名;vector 向量名向量名(长度长度);vector 向量名向量名(长度长度,a);vector 向量名向量名1(向量名向量名2);vector 向量名向量名(a,a+长度长度);(a是数组名是数组名)7.2向量与泛型算法向量与泛型算法7.2.1定义向量列表定义向量列表向量的使用向量的使用:同类型向量可相互赋值同类型向量可相互赋值,不同类型不可相互赋值不同类型不可相互赋值同类向量长度不同也可相互赋值同类向量长度不同也可相互赋值向量中的元素使用类似数组元素向量中的元素使用类似数组元素,可使用可使用ai向量具有成员函数向量具有成员函数size()可得到向量长度()可得到向量长度向量的使用向量的使用:向量的使用向量的使用:7.2.2泛型指针泛型指针向量成员函数向量成员函数begin(),end(),begin(),end()vector a(10,0);a.begin()表示向量中第表示向量中第0个元素的地址个元素的地址a.end()表示最后一个元素后下一个地址表示最后一个元素后下一个地址a.rbegin()表示向量中最后一个元素的地址表示向量中最后一个元素的地址a.rend()表示第一个前一个地址表示第一个前一个地址0 1 2 3 4 5 6 7 8 97.2.2泛型指针泛型指针向量成员函数向量成员函数begin(),end(),rbegin(),rend()可以取得向量中某个元素地址可以取得向量中某个元素地址指针可以存放地址指针可以存放地址注意注意:指针类型必须同向量类型一致指针类型必须同向量类型一致7.2.2泛型指针泛型指针7.2.2泛型指针泛型指针输出向量元素输出向量元素向量使用时类似数组使用向量使用时类似数组使用:7.2.2泛型指针泛型指针输出向量元素输出向量元素利用向量的成员函数输出向量元素利用向量的成员函数输出向量元素 0 1 2 3 4 5 6 7 8 97.2.2泛型指针泛型指针输出向量元素输出向量元素利用向量的成员函数输出向量元素利用向量的成员函数输出向量元素0 1 2 3 4 5 6 7 8 97.2.2泛型指针泛型指针输出向量元素输出向量元素利用向量的成员函数输出向量元素利用向量的成员函数输出向量元素0 1 2 3 4 5 6 7 8 97.2.2泛型指针泛型指针利用普通指针指向向量的首元素地址利用普通指针指向向量的首元素地址,利用指针利用指针输出向量元素输出向量元素.7.2.2泛型指针泛型指针类模板类模板vector中提供了一个通用指针中提供了一个通用指针iterator可使用可使用 vector:iterator 指针名指针名形式定义一个指向向量的指针形式定义一个指向向量的指针该指针可指向向量中的元素该指针可指向向量中的元素.7.2.2泛型指针泛型指针类模板类模板vector中提供了一个通用指针中提供了一个通用指针reverse_iterator可使用可使用vector:reverse_iterator 指针名指针名形式定义一个指向向量的指针形式定义一个指向向量的指针该指针可指向向量中的元素该指针可指向向量中的元素.特别注意特别注意(总结总结)向量不是数组!向量名不是数组名向量不是数组!向量名不是数组名,不表示地址不表示地址!也不可使用也不可使用&区向量元素的首地址区向量元素的首地址!int*p;vector c;p=c;p=&c;不可使用如此形式!不可使用如此形式!特别注意特别注意(总结总结)向量的成员函数向量的成员函数begin()+1,表示下一个地址表示下一个地址end()-1表示前一个地址表示前一个地址rbegin()+1表示前一个地址表示前一个地址rend()-1表示下一个地址表示下一个地址特别注意特别注意:(总结总结总结总结)reverse_iterator 指针变量指针变量只能被赋值为只能被赋值为c.rbegin(),c.rend()int*p;或者或者 vector:reverse_iterator p;p=c.begin()此形式错误!此形式错误!p=c.end()此形式错误!此形式错误!p=c.rbegin()正确正确p=c.rend()正确正确特别注意特别注意:(总结总结总结总结)普通指针变量和普通指针变量和iterator 指针变量指针变量只能被赋值为只能被赋值为c.begin(),c.end()int*p;或者或者 vector:iterator p;p=c.rbegin()此形式错误!此形式错误!p=c.rend()此形式错误!此形式错误!p=c.begin()正确正确p=c.end()正确正确7.2.3向量的数据类型向量的数据类型向量不仅可以存取向量不仅可以存取int,double等普通数据类型等普通数据类型,也可存储对象也可存储对象,指针指针,对象的指针对象的指针向量存取对象的指针向量存取对象的指针7.2.3向量的数据类型向量的数据类型利用泛型算法对向量进行操作利用泛型算法对向量进行操作copysortfindreverse_copy7.2.3向量的数据类型向量的数据类型利用泛型算法对向量进行操作利用泛型算法对向量进行操作7.2.3向量的数据类型向量的数据类型利用泛型算法对向量进行操作利用泛型算法对向量进行操作7.2.3向量的数据类型向量的数据类型利用泛型算法对向量进行操作利用泛型算法对向量进行操作7.2.4向量最基本的操作方法向量最基本的操作方法1)向量容量向量容量size(),max_size(),capacity(),empty()用于得到当前向量的大小信息用于得到当前向量的大小信息7.2.4向量最基本的操作方法向量最基本的操作方法2)使用向量中存放的对象使用向量中存放的对象front(),back(),ia.front()a.back()ai表示向量中存放的第表示向量中存放的第i个对象个对象.7.2.4向量最基本的操作方法向量最基本的操作方法3)向量中插入对象向量中插入对象push_back(const T&)insert(iterator it,const T&)insert(iterator it,size_type n,const T)当当size超出超出capacity时时,capacity翻倍扩容翻倍扩容insert插入到指针位置之前插入到指针位置之前insert插入到指针位置之前插入到指针位置之前并重复插入并重复插入n个个7.2.4向量最基本的操作方法向量最基本的操作方法4)向量中删除对象向量中删除对象pop_back()erase(iterator it)clear()pop_back()删除最后一个对象删除最后一个对象erase删除指定位置的对象删除指定位置的对象clear清除所有对象清除所有对象7.4出圈游戏出圈游戏12345678910117.4出圈游戏出圈游戏7.4出圈游戏出圈游戏7.4出圈游戏出圈游戏