《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;
}
posted on 2010-09-15 21:04 android开发实例 阅读(460) 评论(0) 编辑 收藏 举报