您的位置:首页 > 其它

《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;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  system list delete c