动态Array处理方法

一.引子
    在实际开发中,我们有可能实时的处理一个数组(Array),本文,我利用内存拷贝来实现动态数组相关的宏操作.

二.相关宏
 
#if defined(_MSC_VER)
#      define  VLCCVP (void **)
#else
#      define  VLCCVP
#endif

#define  INSERT_ELEM(p_ar,i_oldsize,i_pos,elem)                                               /
              do                                                                                                                          /
              {                                                                                                                             /
                        if( !i_oldsize) ( p_ar)=NULL;                                                                  /
                        (p_ar)=VLCCVP realloc(p_ar,((i_oldsize)+1)*sizeof(*(p_ar)));       /
                        if((i_oldsize)-(i_pos))                                                                              /
                         {                                                                                                                  /
                               memmove((p_ar)+(i_pos)+1,(p_ar)+(i_pos),                             /
                                                    ( (i_oldsize)-(i_pos))*sizeof(*(p_ar)));                     /
                        }                                                                                                                  /
                        (p_ar)[i_pos]=elem;                                                                               /
                       (i_oldsize)++;                                                                                            /
               } while(0)                                                                                                          
          
    #define REMOVE_ELEM(p_ar,i_oldsize,i_pos)                                                   /
              do{                                                                                                                       /
                           if((i_oldsize)-(i_pos)-1)                                                                      /
                            {                                                                                                             /
                                       memmove((p_ar)+(i_pos),(p_ar)+(i_pos)+1,                   /
                                                          ((i_oldsize)-(i_pos)-1)*sizeof(*(p_ar)));           /
                            }                                                                                                             /
                            if(i_oldsize>1)                                                                                     /
                           {                                                                                                              /
                                    (p_ar)=realloc(p_ar,((i_oldsize)-1)*sizeof(*(p_ar)));           /
                           }                                                                                                              /
                           else                                                                                                       /
                           {                                                                                                              /
                                     free(p_ar);                                                                                  /
                                     (p_ar)=NULL;                                                                            /
                            }                                                                                                            /
                            (i_oldsize)--;                                                                                       /
                       }while(0)                                                               
                        
            
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值