自己建立一个数组类,但是在扩容的时候出问题了!

#include <iostream>
  2 using namespace std;
  3 class Array{
  4         int* data;//真正存储数据的地址
  5         int len;//大小
  6         int size;//元素个数
  7         private:
  8         void expend(){//扩容函数
  9                 len = 2 * len +1;
 10                 /*保留原来的数据的地址*/
 11                 int *temp = data;
 12                 /*申请新内存*/
 13                 data = new int[len];
 14                 /*复制原来的数据*/
 15                 for(int i = 0;i < size;i++){
 16                         data[i] = temp[i];
 17                 }
 18                 /*释放原来的内存*/
 19                 delete[] temp;
 20         }
 21         public:
 22         Array(int len = 5):size(0){
 23                 //根据传入的数据分配空间
 24                 data = new int [len];
 25         }
 26         ~Array(){
 27                 if(data){
 28                         delete[] data;
 29                         data = NULL;
 30                 }
 31         }
 32         /*拷贝构造函数*/
 33         Array(const Array& arr){
 34                 len = arr.len;
 35                 size = arr.size;
 36                 //根据长度开辟新空间
 37                 data = new int[len];
 38                 /*拷贝值*/
 39                 for(int i = 0;i < size;i++){
 40                         //data[i] = arr.data[i];
 41                         *(data+i) = *(arr.data+i);
 42                 }
 43         }
 44         void push_data(const int& d){
 45                 if(size >= len){
 46                         //扩容
 47                         expend();
 48                 }
 49                 else{
 50                         data[size++] = d;
 51                 }
 52         }
 53         friend ostream& operator<<(ostream& os,const Array& arr){
 54                 for(int i = 0;i < arr.size;i++){
 55                         os << arr.data[i] << " ";
 56                 }
 57                 return os;
 58         }
 59 };
 60 int main(){
 61         Array arr;
 62         arr.push_data(9);
 63         arr.push_data(5);
 64         arr.push_data(2);
 65         arr.push_data(7);
 66         arr.push_data(8);
 67         arr.push_data(8);
 68         arr.push_data(8);
 69         arr.push_data(8);
 70         arr.push_data(8);
 71         Array arr2 = arr;
 72         cout << arr << endl;
 73         cout << arr2 << endl;
 74         return 0;
 75 }

   在初始化的大小时不填满数组输出会缺失,但是在大于初始化大小时段错误,应该是扩容出现问题!一直没找到!

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页