C++语言程序设计 清华大学郑莉 数组 直 接 ·静态数组是具有固定元素个数的群体,其 访 中的元素可以通过下标直接访问。 问 缺点:大小在编译时就已经确定,在运 行时无法修改。 的 ●动态数组由一系列位置连续的,任意数量 线 相同类型的元素组成。 性 -优点:其元素个数可在程序运行时改变。 群 vector就是用类模板实现的动态数组·大才 ● 体 动态数组类模板:例9-3(Aray.h头 ●
C++语言程序设计 清华大学 郑莉 16 数组 ⚫ 静态数组是具有固定元素个数的群体,其 中的元素可以通过下标直接访问。 – 缺点:大小在编译时就已经确定,在运 行时无法修改。 ⚫ 动态数组由一系列位置连续的,任意数量 相同类型的元素组成。 – 优点:其元素个数可在程序运行时改变。 ⚫ vector就是用类模板实现的动态数组。 ⚫ 动态数组类模板:例9-3(Array.h) 直 接 访 问 的 线 性 群 体
#ifndef ARRAY H #define ARRAY_H 动态数组类模板程序 #include〈cassert>.〉 template〈class T>//数组类模板定义 class Array private: T*1ist;/用于存放动态分配的数组内存首地址 int size;/数组大小(元素个数) public: Array(int sz 50); //构造函数 Array(const Array<T>&a); //拷贝构造函数 Array () //析构函数 Array<T)&operator=(const Array<T>&rhs);//重载"=“ T&operator[](inti);//重载"[]” const T&operator [(int i)const; operator T*();//重载到T*类型的转换 operator const T (const; int getSize()const; //取数组的大小 void resize(int sz); /修改数组的大小 11
#ifndef ARRAY_H #define ARRAY_H #include <cassert> template <class T> //数组类模板定义 class Array { private: T* list;//用于存放动态分配的数组内存首地址 int size; //数组大小(元素个数) public: Array(int sz = 50); //构造函数 Array(const Array<T> &a); //拷贝构造函数 ~Array(); //析构函数 Array<T> & operator = (const Array<T> &rhs); //重载"=“ T & operator [] (int i); //重载"[]” const T & operator [] (int i) const; operator T * (); //重载到T*类型的转换 operator const T * () const; int getSize() const; //取数组的大小 void resize(int sz); //修改数组的大小 }; 17 动态数组类模板程序
C++语言程序设计 清华大学郑莉 数组类模板模板的构造函数 直 /1构造函数 接 template <class T> Array<T>:Array(int sz){ 访 问 //sz为数组大小(元素个数),应当非负 assert(sz >0); 的 //将元素个数赋值给变量size 线 size sz; 性 /动态分配size个T类型的元素空间 群 list new T [size]; 体 18
C++语言程序设计 清华大学 郑莉 18 数组类模板模板的构造函数 // 构造函数 template <class T> Array<T>::Array(int sz) { //sz为数组大小(元素个数),应当非负 assert(sz >= 0); // 将元素个数赋值给变量size size = sz; //动态分配size个T类型的元素空间 list = new T [size]; } 直 接 访 问 的 线 性 群 体
C叶+语言程序设计 清华大学郑莉 数组类模板的拷贝构造函数 直 /拷贝构造函数 接 template〈class T> 访 Array<T>:Array(const Array<T>&a){ //从对象x取得数组大小,并赋值给当前对象的成员 问 size a.size; 的 //为对象申请内存并进行出错检查 线 1ist=newT[size];/动态分配n个T类型的元素空间 /1从对象X复制数组元素到本对象 性 for (int i =0;i size;i++) 群 list[i]a.list[i]; 体
C++语言程序设计 清华大学 郑莉 19 数组类模板的拷贝构造函数 //拷贝构造函数 template <class T> Array<T>::Array(const Array<T> &a) { //从对象x取得数组大小,并赋值给当前对象的成员 size = a.size; //为对象申请内存并进行出错检查 list = new T[size];// 动态分配n个T类型的元素空间 //从对象X复制数组元素到本对象 for (int i = 0; i < size; i++) list[i] = a.list[i]; } 直 接 访 问 的 线 性 群 体
C++语言程序设计 清华大学郑莉 浅拷贝 a的数组元素 a的数组元素 占用的内存 占用的内存 list a list size size template <class T> Array<T>:Array( b const Array<T>&x){ list size size x.size; list x.list; int main() 拷贝前 Array<int>a(10); 拷贝后 Array<int>b(a);
C++语言程序设计 清华大学 郑莉 20 浅拷贝 list size a a的数组元素 占用的内存 拷贝前 list size a a的数组元素 占用的内存 拷贝后 list size b int main() { Array<int> a(10); ...... Array<int> b(a); ...... } template <class T> Array<T>::Array( const Array<T>& x) { size = x.size; list = x.list; }