- 积分
- 784
- 明经币
- 个
- 注册时间
- 2003-11-23
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2003-12-29 14:57:00
|
显示全部楼层
其实,我们不必在此谈孔乙己的一个字有几种写法,关键在于对问题的正确认识,任何事物都有他的正反面。
如果你只是单纯的遍历选择集里的对象,而不用涉及到n,就可以修改n的值。如果了解计算机原理和汇编语言的话,就可以知道这些指令的寻址时间和执行时间以及执行的方式-如果你不考虑速度的问题,不做大数据量的操作,就无所谓了。
但是要涉及到n的值,情况就不同了。比如要套一层循环,外层遍历对象,内层判断和该对象的关系:
{
struct resbuf *rb=NULL;
rb=acutBuildList(RTDXF0,"LINE",RTNONE);
if(rb==NULL)
return;
long ssname[2];
if(acedSSGet("X",NULL,NULL,rb,ssname)!=RTNORM)
{
acutRelRb(rb);
return;
}
long ncount=0,enta[2],entb[2];
acedSSLength(ssname,&ncount);
long i,j;
for(i=0;i<ncount;i++)
{
acedSSName(ssname,i,enta);
//...
for(j=0;j<ncount;j++)
{
if(j==i)
continue;
//...
}
}
acutRelRb(rb);
acedSSFree(ssname);
}
这样可能在理解上容易些,思路也比较清楚。当然也有其他的方法和技巧,具体问题具体分析。
基本的理论+灵活的运用,这就是C/C++的优势所在-自由,思维开放。
不象VB,如果用FOR I=0 TO N想从中间直接跳出进入下个循环,我真的还没想到其他的好办法,只能用goto!
for i=0 to n
for j=0 to n
if j=i then goto continue_j
'...
next j
continue_j:
next i
如果用:
for i=0 to n
for j=0 to n
if j<>i then
'如果这里处理的较多,从代码的编写和阅读上又不太合理,
'只有写函数,又涉及到参数问题。另外,如果n较大,在反复调用函数的过程中因进栈和出栈
'会影响执行效率,这又是一个问题。所以这是矛盾的东西。
end if
next j
continue_j:
next i
好了,多谢各位的批评指正,良药苦口利于病!也希望彼此之间多多交流!
在此祝各位新年快乐,在新的一年里,更上一层楼! |
|