MFC中CArray的问题?

CStrings;s.Format(L"%d",m_num);MessageBox(s);//m_num为5CStrings11;intjjj=list.GetSize(... 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中元素
}
这里我改成这样写为什么有出现断言了呢?
展开
 我来答
悉己n
2008-05-21 · TA获得超过759个赞
知道小有建树答主
回答量:684
采纳率:100%
帮助的人:563万
展开全部
list.RemoveAt(i);

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

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

@@这里我改成这样写为什么有出现断言了呢?
因为i在增加,实际array的长度一直在减少,length还是5,所以会越界啊。删除所有元素应该会有函数,clear应该可以的,一般不推荐循环删除的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式