首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

for 循环的条件语句是每循环一次都计算一次吗?解决方案

2012-05-21 
for 循环的条件语句是每循环一次都计算一次吗?xCoords是 c++的一个vectorC/C++ codefor (i0iprior-xCo

for 循环的条件语句是每循环一次都计算一次吗?
xCoords是 c++的一个vector

C/C++ code
        for (i=0;i<prior->xCoords.size();i++)        {                  if(/* 条件判断然后删除xCoords的一个元素 */)           prior->xCoords.erase(prior->xCoords.begin()+j);        }

这样以来, 我每循环一次, 由于删除了元素, prior->xCoords.size()的大小就变一次. 

在for() 里面, 每循环一次, 是不是 i<prior->xCoords.size()也会更新大小?

谢谢

[解决办法]
对,每次循环都执行一次
[解决办法]
楼主代码BUG。标准库erace之后size变化,而变量i继续++,超出范围引发异常的。
[解决办法]
C/C++ code
   for (i=0;i<prior->xCoords.size();i++)  //------ 此处 i        {                  if(/* 条件判断然后删除xCoords的一个元素 */)           prior->xCoords.erase(prior->xCoords.begin()+j); //------ 此处 j ??        }
[解决办法]
探讨

引用:

楼主代码BUG。标准库erace之后size变化,而变量i继续++,超出范围引发异常的。


非常感谢

那您说改成 ++i

?

[解决办法]
这个习惯不好
[解决办法]
++
探讨

楼主代码BUG。标准库erace之后size变化,而变量i继续++,超出范围引发异常的。

[解决办法]
会更新大小
[解决办法]
哪位给个官方点的说法,我用过QList觉得是不能更新,必须手动控制,这个我不敢确定,但可以确定的是楼主这样做其实相当于赌一下,很危险,自己去控制吧我以前做的是
int nCount = .size();
for (int i =...)
{
// 内部控制i的大小
i--;
}
[解决办法]
C++的代码优化是能把计算抽出来的
[解决办法]
是的,因为size()成员是全局的,那么它是不断更新的。
这个程序会有逻辑错误,i的值是递增的,而prior->xCoords.size();的值是减少的。
[解决办法]
是的,因为size()成员是全局的,那么它是不断更新的。
这个程序会有逻辑错误,i的值是递增的,而prior->xCoords.size();的值是减少的。
[解决办法]
删除的时候i就不需要+了,不过建议你接受erase返回的index。
[解决办法]
如果楼主想删除VECTOR中符合条件的条目的话,这样很容易造成造成下标越界的错误。如果非要用VECTOR的话楼主可以从后往前删。即
for( int i=size-1; i>=0; i--)
{
if(...)
{
v.erase(v.begin()+i);
}
}
[解决办法]
每次循环都执行一次,xCoords.size()会不断减小
[解决办法]
其实楼主这么做没什么错,唯一的问题在于:当删除节点时,游标不能再次下移,下一会造成漏检和超界。
其实楼主这样写代码,从可读性上讲,还是比倒序、调用模板函数更直观

热点排行