CArray.RemoveAt(i)

使用CArray.RemoveAt()移除某个元素后,CArray元素位置会发生变化。

所以当移除单个元素时,可以得到正确结果,一旦连续移除多个元素时,就得考虑到一个问题。

比如:

for(int i=0;i

{

   if(条件判断式)

     Array.RemoveAt(i);

     ……

}

程序不会按编者意图执行,当移除元素0时,原来的1位置的元素就会取代元素0,后续元素依次向前移动。

整个过程中元素地址一直在变。程序结果一定让你大吃一惊。通常可以改为如下逻辑:

for(int i=Array.GetCount-1;i>=0;i--)

{

   if(条件判断式)

     Array.RemoveAt(i);

     ……

}

从后向前遍历,就可以达到效果了。

同理,此过程中不要进行保存该数组中任何元素地址的操作(如stl::Map),因为其地址一直在变。

你可能感兴趣的:(Debug,RemoveAt,CArray,C++,Programming,Debug)