MFC中CArray的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 23:43:28
CString s;
s.Format(L"%d", m_num);
MessageBox(s); //m_num为5

CString s11;
int jjj = list.GetSize();
s11.Format(L"%d", jjj);
MessageBox(s11); //之前的CArray的长度为5

for(int i = list.GetSize() - m_num; i < list.GetSize();i++)
{

list.RemoveAt(i); //删除CArray中元素
}
CString s1;
int jj = list.GetSize();
s1.Format(L"%d", jj);
MessageBox(s1); //删除之后长度为2

为什么循环删除元素之后长度是2呢?

改成list.RemoveAt(0); //删除CArray中元素

要记住,你在删除元素时会改变其它元素的序号

皇家救星说的没错,在删除的时候先是删了第0个,接着原来的第一元素变为了0,在循环中,i变为了1,而你删的是第i个元素。所以在一次循环后你删的是最初的第二个元素。把循环中的list.RemoveAt(i); 改为list.RemoveAt(0); 就可以了。

g