andycong 发表于 2003-12-29 10:28:00

这两天有事情,没有过来,看到大家这样帮助小弟,感激涕零啊!
谢谢!

victory 发表于 2003-12-29 14:57:00

其实,我们不必在此谈孔乙己的一个字有几种写法,关键在于对问题的正确认识,任何事物都有他的正反面。
如果你只是单纯的遍历选择集里的对象,而不用涉及到n,就可以修改n的值。如果了解计算机原理和汇编语言的话,就可以知道这些指令的寻址时间和执行时间以及执行的方式-如果你不考虑速度的问题,不做大数据量的操作,就无所谓了。
但是要涉及到n的值,情况就不同了。比如要套一层循环,外层遍历对象,内层判断和该对象的关系:
{
   struct resbuf *rb=NULL;
   rb=acutBuildList(RTDXF0,"LINE",RTNONE);
   if(rb==NULL)
      return;

   long ssname;
   if(acedSSGet("X",NULL,NULL,rb,ssname)!=RTNORM)
   {
      acutRelRb(rb);
      return;
   }

   long ncount=0,enta,entb;
   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

好了,多谢各位的批评指正,良药苦口利于病!也希望彼此之间多多交流!
在此祝各位新年快乐,在新的一年里,更上一层楼!

spaceh 发表于 2004-4-11 10:14:00

这篇帖子现在看来还是很好啊!
页: 1 [2]
查看完整版本: [ARX]我建立了一个选择集,如何从选择集中遍历实体?