`
java-mans
  • 浏览: 11436495 次
文章分类
社区版块
存档分类
最新评论

《ASCE1885的源码分析》の动态改变数组大小

 
阅读更多

一段简单的动态改变数组大小的代码,给初学者看看,详见代码:

#include <iostream>

class Int_array

{

static int no_instances; //数组的实例个数

int size;

int len;

int *array; //数组指针

public:

Int_array(int);

Int_array(const Int_array&);

int &retrieve(int); //索引元素

int no_instance();

void Display();

int length();

void Add(int);

void resize(int);

};

int Int_array::no_instances = 0;

Int_array::Int_array(int i)

{

len = 0;

size = i;

array = new int[size];

for(int j=0; j<size; j++)

array[j] = 0;

no_instances++;

std::cout<<"Constructing./n";

}

//复制构造函数

Int_array::Int_array(const Int_array &ob)

{

len = ob.len;

size = ob.size;

array = new int[size];

for(int i=0; i<size; i++)

array[i] = ob.array[i];

no_instances++;

std::cout<<"Copy constructing./n";

}

int Int_array::length()

{

return len;

}

int Int_array::no_instance()

{

return no_instances;

}

//数组索引函数

int &Int_array::retrieve(int i)

{

return array[i];

}

//打印数组所有非0元素

void Int_array::Display()

{

for(int i=0; i<size; i++)

{

if(array[i]) //0的话不显示

std::cout<<array[i]<<" ";

}

std::cout<<std::endl;

}

//往数组中增加元素

void Int_array::Add(int elem)

{

bool flag = true;

for(int i=0; i<size && flag; i++)

{

if(!array[i])

{

++len;

array[i] = elem;

flag = false;

}

}

if(flag)

resize(elem);

}

void Int_array::resize(int elem)

{

int *d;

bool flag = true;

d = new int[size*2]; //数组空间成倍增长

for(int i=0; i<size*2; i++)

{

if(i < size)

d[i] = array[i]; //复制数组

else

d[i] = 0;

}

delete[] array; //释放原有数组空间

size *= 2;

array = new int[size];

for(int i=0; i<size; i++)

array[i] = d[i];

for(int i=0; i<size && flag; i++)

{

if(!d[i])

{

++len;

array[i] = elem;

flag = false;

}

}

delete[] d;

}

int main()

{

Int_array a(2),b(2),c(2);

int el;

c.Add(222);

c.Add(333);

c.Add(444);

system("color d"); //设置控制台字体颜色

std::cout<<"Enter six elements for a:/n";

for(int i=0;i<6;i++)

{

std::cin>>el;

a.Add(el);

}

system("color 1");

std::cout<<"Enter 4 elements for b:/n";

for(int i=0;i<4;i++)

{

std::cin>>el;

b.Add(el);

}

system("color 2");

Int_array d=c; //调用复制构造函数

d.Display();

std::cout<<"Enter 3 elements for d:/n";

for(int i=0;i<3;i++)

{

std::cin>>el;

d.Add(el);

}

system("color e");

std::cout<<"Display The last element in d: "<<d.retrieve(2)<<std::endl;

std::cout<<"DISPLAY A LIST :/n";

system("color c");

a.Display();

std::cout<<"THE LENGTH: "<<a.length()<<std::endl;

std::cout<<"DISPLAY B LIST :/n";

b.Display();

std::cout<<"THE LENGTH: "<<b.length()<<std::endl;

std::cout<<"DISPLAY C LIST :/n";

c.Display();

std::cout<<"THE LENGTH: "<<c.length()<<std::endl;

std::cout<<"DISPLAY D LIST :/n";

d.Display();

std::cout<<"THE LENGTH: "<<d.length()<<std::endl;

std::cout<<"/n/nThe Number of instance(s): "<<a.no_instance()<<std::endl;

system("pause");

return 0;

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics