《ASCE1885的源码分析》の动态改变数组大小
2010-09-15 21:04
260 查看
一段简单的动态改变数组大小的代码,给初学者看看,详见代码:
#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;
}
#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;
}
相关文章推荐
- 《ASCE1885的源码分析》の动态改变数组大小
- c#动态改变数组大小
- 分享非常有用的Java程序 (关键代码)(四)---动态改变数组的大小
- 分享非常有用的Java程序 (关键代码)(四)---动态改变数组的大小
- 在iframe的name不定时,根据被包含页面大小动态改变iframe的大小(by quqi99)
- 动态改变对话框的位置和大小
- 如何动态改变ImageView大小 -- 方案之二
- 动态改变大小
- WPF 动态改变窗口大小
- Android之动态改变控件大小
- JavaScript 动态改变图片大小
- EasyUI 动态改变region区大小
- C语言实现动态数组大小
- Android 自定义SeekBar动态改变 硬件音量大小 实现和音量键的同步
- VC中动态改变控件和对话框字体(大小)
- 动态改变对话框可调整大小属性 “Border”项
- textview动态设置 DrableLeft 以及改变图片大小
- 动态及静态数组大小,strlen()函数与sizeof()c操作符
- WinCE应用程序开发---动态分配数组内存大小
- ugui学习——可动态改变Content大小的ScrollView