MFC中CArray的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/27 00:51:33
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呢?
int length = list.GetSize();
s11.Format(L"%d", length);
MessageBox(s11);

for(int i = length - m_num; i < length; i++)//error
{

list.RemoveAt(i); //删除CArray中元素
}
这里我改成这样写为什么有出现断言了呢?

list.RemoveAt(i);

删掉一个之后,list.GetSize();就会减少1
看看下面这个表

i list.GetSize()
0 5
1 4
2 3
3 2
循环中止,所以是2

@@这里我改成这样写为什么有出现断言了呢?
因为i在增加,实际array的长度一直在减少,length还是5,所以会越界啊。删除所有元素应该会有函数,clear应该可以的,一般不推荐循环删除的