清除一个定义元素的数组 - 页 20

 
彼得,你有一个独特的编程风格。简而言之,你是在无视,而不是因为无视的情况下编程。
 
Реter Konow:

对。但我们怎么知道所提供的算法没有留下任何空白?校验和并不能证明这一点。元素的数量也是如此。毕竟,这个函数计算的是在数组被调整大小之前的元素。

不过,你已经找到了一个实现方法,修复了静态数组中的一个错误。

int arrayFilter2(int &Test[],const int value)
  {
   int s,_s=s=ArraySize(Test);
   bool result=false;

   for(int i=0,j=0; i<_s; i++,j++)
     {
      if(Test[i]==value)// || Test[i]==NULL)
        {
         result=true;
         s--;
         j--;
         continue;
        }
      if(result)
         Test[j]=Test[i];
     }

   if(s<_s)
      if(ArrayResize(Test,s))
         if(ArraySize(Test)==_s)
            ArrayFill(Test,s,_s-s,NULL);

   return s;
  }

现在,如果它是静态的,我们就清除尾巴。

附加的文件:
 
Реter Konow:

对。但我们怎么知道所提供的算法没有留下任何空白?校验和并不能证明这一点。元素的数量也是如此。毕竟,这个函数计算的是在数组被调整大小之前的元素。

你应该看最新版本的代码,而不是第一个版本。
这种考虑到数组中元素序列的校验,已经使用了很长时间。

double ControlSumm(int &a[]) 
  {
   double sum=0;
   for(int i=0; i<ArraySize(a); i++) sum+=(double)a[i]/(i+1);
   return sum;
  }
 

纠正了第三次测试中的一个错误,并调整了我的功能

附加的文件:
 
Nikolai Semko:

你要看的是最新版本的代码,而不是第一个。
已经很久没有使用这样的校验了,它考虑到了数组中元素的顺序。

你需要一个可证明正确性的证据。一行20个数字就足以满足这个要求。如果该算法通过了这一测试,就可以对其进行速度测试。

所进行的测试是一个盲目的测试。

也许所有的算法都能正确地工作,也许领导人会掉以轻心。

 
Реter Konow:

你需要一个可证明正确性的证据。一行20个数字就足以满足这个要求。如果该算法通过了这一检查,就可以对其进行速度测试。

校验的目的不是为了确保在校验和相同的情况下数组是相同的,而是为了确保在校验和不同的情况下数组是不同的。

 
Nikolai Semko:

校验和的目的不是为了确保在校验和相同的情况下数组是相同的,而是为了确保在校验和不同的情况下数组是不同的。

尼古拉,使用我的例子,用一个20个元素的数组来检查算法并不难,是吗?只是在结果中输出?

 
Реter Konow:

你需要一个可证明正确性的证据。一行20个数字就足以满足这个要求。如果该算法通过了这一测试,就可以对其进行速度测试。

所进行的测试是一个盲目的测试。

也许所有的算法都能正常工作,也许领导人会离开他们的位置。

如果你不相信校验和,有什么问题呢?

 
Реter Konow:

尼古拉,使用我的例子,用一个20个元素的数组来检查算法并不难,是吗?只是在结果中显示吗?

在一个有20个元素的数组中,不可能评估一个函数的速度。而这正是这个话题的重点。

 
Nikolai Semko:

在一个有20个元素的数组中,不可能估计一个函数的速度。而这正是这个分支的重点。

对算法还有一个要求--在去除不必要的元素后,在数组内正确放置元素。必须先进行这项检查。然后是速度检查。