废话int *pI=new int[20]得到的为20个整数的长度的连续空间,你可以用*(pI+0)~*(pI+19)来访问这20个空间,
而连续20次new int得到20个离散的空间,况且:猴子摘玉米的故事听过吧?
20次连续的new int就是一只猴子摘了20次玉米,得到了最后一次的那一个,前面的19个?鬼知道在哪? 

解决方案 »

  1.   

    eion(电离子):
     
    这么说我是真的想错了
    我本来考虑节省空间,
    即需要一个开一个、这么说来是不行啦,
    不知道你有什么高着没有
      

  2.   

    就拿你的猴子摘玉米的故事来说吧,
    如果猴子时不时的摘一只玉米,
        而且不知猴子到底要摘几只玉米 ,也就是说
        不能int *pI=new int[20],
        因为空间开大了则浪费
                开少了则不够    
    难道这样就没办法描述了吗
      

  3.   

    realloc
    HeapReAlloc之类的函数。
      

  4.   

    当然可以,得用链表——new来的数据必须找一个空间存放,否则事后不知道得到的空间在何处数据结构学过吧?
      

  5.   

    或者让猴子掰【new】一个,吃一个,消化一个【delete】
    再掰【new】,吃,消化【delete】
    …………
    As you wish
      

  6.   

    可我不想让猴子掰【new】一个,吃一个!!
      

  7.   

    最简单的链表,自己慢慢看——没调试
    class link
    {
    public:
        int data;
        link * next;
    public:
        link(){next=NULL;data=-1;}
        void Add(link* node){
            if( next=NULL) {next=node; node->next=NULL;}
            for(link*p=this;p->next!=NULL;p=p->next);
            p ->next = node;
            node->next = NULL;
        }
        void print(){
            for(link *p=this; p!=NULL; p=p->next ) cout<<p->data<<endl;
        }
        ~link()
        {
            if( next!=NULL)delete this;
            else for(link *p=this;p!=NULL;p=p->next ) delete p;
         }
    }
    void main()
    {
        link *p,*head;
        head = new link;
        for(int i=0;i<100;i++)
        {
             p = new link;
             p->data = i;
             head->add(p);
        }
        head->print();
        delete head;
    }
      

  8.   

        ~link()
        {
            if( next!=NULL)delete this;
            else for(link *p=this;p!=NULL;p=p->next ) delete p;
        }
    }
    改为
        ~link()
        {
            if( next!=NULL)return;
            else for(link *p=next;p!=NULL;p=p->next ) delete p;
        }
    };
      

  9.   

    谢谢eion(电离子),我马上试试