第01讲 类模板与向量(一)  

7.1 类模板

  复习内容:函数模板
  3.5函数模板
  有些函数重载时参数个数相同,只是类型不同,此时重载函数比较繁琐,可利用函数模板实现。
  第七章 类模板与向量 - 图1
  第七章 类模板与向量 - 图2
  第七章 类模板与向量 - 图3
  函数模板定义格式:
  第七章 类模板与向量 - 图4
  定义函数模板后,函数调用时根据函数参数来类型来确定调用哪个版本的函数。函数执行时确定参数类型的函数称为模板函数。
  第七章 类模板与向量 - 图5
  此种形式调用中称为函数模板的参数一般可省略。Typename可替代class
  第七章 类模板与向量 - 图6
  第七章 类模板与向量 - 图7
  第七章 类模板与向量 - 图8
  第七章 类模板与向量 - 图9
  若某函数参数类型不一致时,也可定义函数模板。
  第七章 类模板与向量 - 图10

7.1 类模板

  7.1.1类模板的基础知识
  template
  class 类名{
  Private:
  //成员定义
  Protected:
  //成员定义
  Public:
  //成员定义
  }
  第七章 类模板与向量 - 图11
  template class 类名{ }
  第七章 类模板与向量 - 图12
  类模板的对象: 类名<模板参数> 对象名(参数);
  第七章 类模板与向量 - 图13
  类的成员函数定义(在类体外定义时):
  模板类的成员函数定义形式:
  template
  返回值类型 类名 :: 函数名(参数)
  { //函数体 }
  普通类的成员函数定义形式:
  返回值类型 类名 :: 函数名(参数)
  { //函数体 }
  第七章 类模板与向量 - 图14
  第七章 类模板与向量 - 图15
  第七章 类模板与向量 - 图16
  第七章 类模板与向量 - 图17
  第七章 类模板与向量 - 图18
  第七章 类模板与向量 - 图19
  第七章 类模板与向量 - 图20
  7.1.2类模板的派生与继承
  第七章 类模板与向量 - 图21
  第七章 类模板与向量 - 图22
  第七章 类模板与向量 - 图23
  第七章 类模板与向量 - 图24
  模板类继承普通类,模板类作普通类的派生类
  继承后成员使用同一般类的继承。
  模板类派生模板类
  模板类使用时,须指出模板类参数
  第七章 类模板与向量 - 图25
  第七章 类模板与向量 - 图26
  第七章 类模板与向量 - 图27
  第七章 类模板与向量 - 图28

7.2 向量与泛型算法

  7.2.1定义向量列表
  向量是C++中一维数组的类版本
  用于存放多个相同类型的数据。
  可动态指定向量中元素的个数,并提供了多个成员函数以方便数据使用,同时可使用泛型算法。
  是C++中的类模板。使用时加头文件vector
  向量的声明形式:
  vector<类型> 向量名;
  vector<类型> 向量名(长度);
  vector<类型> 向量名(长度,a);
  vector<类型> 向量名1(向量名2);
  vector<类型> 向量名(a , a+长度);
  (a是数组名)
  向量的使用:
  同类型向量可相互赋值,不同类型不可相互赋值
  同类向量长度不同也可相互赋值
  向量中的元素使用类似数组元素,可使用a[i]
  向量具有成员函数size()可得到向量长度
  第七章 类模板与向量 - 图29
  第七章 类模板与向量 - 图30
  第七章 类模板与向量 - 图31
  第七章 类模板与向量 - 图32

第02讲 类模板与向量(二)  

7.2.2泛型指针
  向量成员函数begin(),end(),begin(),end()
  vector a(10,0);
  a.begin()表示向量中第0个元素的地址
  a.end() 表示最后一个元素后下一个地址
  a.rbegin()表示向量中最后一个元素的地址
  a.rend() 表示第一个前一个地址
  第七章 类模板与向量 - 图33
  向量成员函数begin(),end(),rbegin(),rend()
  可以取得向量中某个元素地址
  指针可以存放地址
  注意:指针类型必须同向量类型一致
  第七章 类模板与向量 - 图34
  第七章 类模板与向量 - 图35
  输出向量元素
  向量使用时类似数组使用:
  第七章 类模板与向量 - 图36
  第七章 类模板与向量 - 图37
  利用向量的成员函数输出向量元素
  第七章 类模板与向量 - 图38
  第七章 类模板与向量 - 图39
  第七章 类模板与向量 - 图40
  输出向量元素
  利用向量的成员函数输出向量元素
  第七章 类模板与向量 - 图41
  第七章 类模板与向量 - 图42
  第七章 类模板与向量 - 图43
  利用向量的成员函数输出向量元素
  第七章 类模板与向量 - 图44
  第七章 类模板与向量 - 图45
  第七章 类模板与向量 - 图46
  利用普通指针指向向量的首元素地址,利用指针输出向量元素。
  第七章 类模板与向量 - 图47
  第七章 类模板与向量 - 图48
  类模板vector中提供了一个通用指针iterator
  可使用
  vector::iterator 指针名
  形式定义一个指向向量的指针
  该指针可指向向量中的元素。
  第七章 类模板与向量 - 图49
  第七章 类模板与向量 - 图50
  类模板vector中提供了一个通用指针reverse_iterator
  可使用
  vector::reverse_iterator 指针名
  形式定义一个指向向量的指针
  该指针可指向向量中的元素。
  第七章 类模板与向量 - 图51
  第七章 类模板与向量 - 图52
  特别注意(总结)
  向量不是数组!!向量名不是数组名,不表示地址!也不可使用&取向量元素的首地址!
  int p;
  vector c;
  p=c;
  p=&c; 不可使用如此形式!!
  向量的成员函数
  begin() +1,表示下一个地址
  end()-1表示前一个地址
  rbegin()+1表示前一个地址
  rend()-1表示下一个地址
  第七章 类模板与向量 - 图53
  reverse_iterator 指针变量
  只能被赋值为c.rbegin(),c.rend()
  int
p;
  或者
  vector::reverse_iterator p;
  p=c.rbegin() 此形式错误!!!!
  p=c.rend() 此形式错误!!!!
  p=c.begin() 正确
  p=c.end() 正确
  普通指针变量和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等普通数据类型,也可存储对象,指针,对象的指针
  第七章 类模板与向量 - 图54
  第七章 类模板与向量 - 图55
  第七章 类模板与向量 - 图56
  第七章 类模板与向量 - 图57
  向量存取对象的指针
  第七章 类模板与向量 - 图58
  第七章 类模板与向量 - 图59
  7.2.3向量的数据类型
  利用泛型算法对向量进行操作
  copy
  sort
  find
  reverse_copy
  第七章 类模板与向量 - 图60
  第七章 类模板与向量 - 图61
  第七章 类模板与向量 - 图62
  第七章 类模板与向量 - 图63
  第七章 类模板与向量 - 图64
  第七章 类模板与向量 - 图65
  7.2.4向量最基本的操作方法
  1,向量容量
  size(),max_size(),capacity(),empty()
  用于得到当前向量的大小信息
  第七章 类模板与向量 - 图66
  第七章 类模板与向量 - 图67
  2.使用向量中存放的对象
  front(),back(), [i]
  a.front()
  a.back()
  a[i]表示向量中存放的第i个对象。
  第七章 类模板与向量 - 图68
  第七章 类模板与向量 - 图69
  第七章 类模板与向量 - 图70
  3.向量中插入对象
  push_back(const T &)
  insert(iterator it,const T & )
  insert(iterator it,size_type n, const T)
  第七章 类模板与向量 - 图71
  当size超出capacity时,capacity翻倍扩容
  第七章 类模板与向量 - 图72
  第七章 类模板与向量 - 图73
  insert
  插入到指针位置之前
  第七章 类模板与向量 - 图74
  第七章 类模板与向量 - 图75
  insert
  插入到指针位置之前并重复插入n个
  第七章 类模板与向量 - 图76
  4.向量中删除对象
  pop_back()
  erase(iterator it )
  clear()
  第七章 类模板与向量 - 图77
  pop_back()删除最后一个对象
  第七章 类模板与向量 - 图78
  第七章 类模板与向量 - 图79
  erase
  删除指定位置的对象
  第七章 类模板与向量 - 图80
  第七章 类模板与向量 - 图81
  clear
  清除所有对象
  第七章 类模板与向量 - 图82

7.4 出圈游戏

  第七章 类模板与向量 - 图83
  第七章 类模板与向量 - 图84
  第七章 类模板与向量 - 图85
  第七章 类模板与向量 - 图86
  第七章 类模板与向量 - 图87