《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编辑  收藏  举报

导航