CPtrArray在移除时出现有关问题

CPtrArray在移除时出现问题
CPtrArray cpa;

int count = cpa.GetSize();

for(int i = 0; i < count; i++)
{
    cpa.RemoveAt(i);  //1.这样处理会出问题 }

或:

for(int i = count -1; i >= 0; i--)
{
    cpa.RemoveAt(i);//2.这样是没问题的
}

上面用红色标注的两句,实在是不明白为什么会出现这样的问题, 貌似上面一句没有越界问题,如果只能用下面那句,那么如果我想从第一项删除时岂不很麻烦?
------解决方案--------------------
第一个循环肯定有问题的。因为你使用了固定的循环次数,但由于你RemoveAt函数,导致数组中的实际数量在减少,所以删掉一半以后就会崩溃了。
改为:
for(int i = 0; i < count; i++)
{
    cpa.RemoveAt(0);  //始终删除第0个
}
==========
第二个就没问题了,因为指定的删除需要会一直存在
------解决方案--------------------
for(int i = 0; i < count; i++)
{
    cpa.RemoveAt(i);  //1.这样处理会出问题 }

}
当i=0时,删除数组第0个,此时数组中原来的第1个就变成了第0个,但是此时i=1,count也重新变成了count-1 ,依次类推,在执行到一半时就删除越界了 
------解决方案--------------------
偶也犯过这问题。

因为控件容器都是动态规划的。

删除一个以后索引就变少了。导致越界了。
------解决方案--------------------
应该从大 删除到 小